Forked from: https://github.com/bokuweb/docx-rs
* fix: support dstrike * fix * fix: package |
||
---|---|---|
.github | ||
.vscode | ||
docs | ||
docx-core | ||
docx-wasm | ||
fixtures | ||
images | ||
output | ||
.gitignore | ||
CHANGELOG.md | ||
CONTRIBUTING.md | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE | ||
README.md | ||
hello.docx | ||
hello.json | ||
image.docx | ||
logo.png | ||
makefile | ||
renovate.json | ||
rust-toolchain | ||
rustfmt.toml |
README.md
A .docx file `writer` with Rust/WebAssembly.
Installation
Rust
[dependencies]
docx-rs = "0.4"
Browser/Node.js
$ pnpm add docx-wasm
Example
Rust
use docx_rs::*;
pub fn hello() -> Result<(), DocxError> {
let path = std::path::Path::new("./hello.docx");
let file = std::fs::File::create(path).unwrap();
Docx::new()
.add_paragraph(Paragraph::new().add_run(Run::new().add_text("Hello")))
.build()
.pack(file)?;
Ok(())
}
Browser
import { saveAs } from "file-saver";
// // Note that a dynamic `import` statement here is required due to webpack/webpack#6615,
import("docx-wasm").then((w) => {
const { buffer } = new w.Docx()
.addParagraph(
new w.Paragraph().addRun(new w.Run().addText("Hello world!!"))
)
.build();
saveAs(new Blob([buffer]), "hello.docx");
});
Node.js
const w = require("docx-wasm");
const { writeFileSync } = require("fs");
const { buffer } = new w.Docx()
.addParagraph(new w.Paragraph().addRun(new w.Run().addText("Hello world!!")))
.build();
writeFileSync("hello.docx", Buffer.from(buffer));
More examples
Development
Requirements
- Node.js 16+
- pnpm 9+
- wasm-pack0.10.1 (https://rustwasm.github.io/wasm-pack/)
- insta (https://github.com/mitsuhiko/insta)
Examples
You can run example with following code.
Please see examples
directory.
$ cargo run --example [EXAMPLE_NAME]
For Example if you want to run hello
example.
Please run following command.
$ cargo run --example hello
So you can see output file in output directory.
Testing
Rust
Please run following command.
make lint && make test
If snapshot testing is failed, fix code or update snapshot files. (See https://insta.rs/).
$ cargo-insta review
Then re run test.
$ make test
Wasm
Please run following command.
$ cd docx-wasm && pnpm install && pnpm test
If snapshot testing is failed, fix code or update snapshot files. (See https://jestjs.io/docs/snapshot-testing).
$ pnpm test -- --updateSnapshot
Features
- Paragraph
- Alignment
- Indent
- Numbering
- Run
- Bold
- Size
- Font
- Color
- Highlight
- Underline
- vanish
- Italic
- TextBorder
- Footnote
- Break
- Header
- Footer
- Comment
- Image
- Style
- Table
- HIstory
- Table of contents
- Section
- Textbox