#parser #generator #openxml

docx

A Rust library for parsing and generating docx files

11 releases (4 stable)

1.1.2 Apr 27, 2020
1.1.1 Apr 7, 2020
1.1.0 Mar 25, 2020
0.2.1 Nov 8, 2019
0.1.0 Aug 17, 2018

#1580 in Parser implementations

Download history 16/week @ 2023-11-20 19/week @ 2023-11-27 2/week @ 2023-12-04 8/week @ 2023-12-11 10/week @ 2023-12-18 9/week @ 2023-12-25 18/week @ 2024-01-08 10/week @ 2024-01-15 1/week @ 2024-01-22 6/week @ 2024-01-29 5/week @ 2024-02-05 23/week @ 2024-02-12 54/week @ 2024-02-19 43/week @ 2024-02-26 53/week @ 2024-03-04

173 downloads per month
Used in office-crypto

MIT license

105KB
3K SLoC

GitHub Workflow Status Crates.io Document

docx

A Rust library for parsing and generating docx files.

Document

License

MIT


lib.rs:

A Rust library for parsing and generating docx files.

Create a new document

Use Docx::default to create a new empty Docx, then use Docx::write_file for saving it to a file.

use docx::document::Paragraph;
use docx::Docx;

let mut docx = Docx::default();

// create a new paragraph and insert it
let para = Paragraph::default().push_text("Lorem Ipsum");
docx.document.push(para);

docx.write_file("demo.docx").unwrap();

Also see: Docx::write.

Reading from files

Use DocxFile::from_file to extract content from docx files, then use DocxFile::parse to generate a Docx struct.

use docx::document::Paragraph;
use docx::DocxFile;

let docx = DocxFile::from_file("origin.docx").unwrap();
let mut docx = docx.parse().unwrap();

let para = Paragraph::default().push_text("Lorem Ipsum");
docx.document.push(para);

docx.write_file("origin_appended.docx").unwrap();

To reduce allocations, DocxFile::parse returns a Docx struct contains references to DocxFile itself. It means you have to make sure that DocxFile lives as long as its returned Docx:

use docx::DocxFile;

let mut docx_option = None;
{
    let docx_file = DocxFile::from_file("foo.docx").unwrap();
    let mut docx = docx_file.parse().unwrap();
    docx_option = Some(docx);
    // `docx_file` gets dropped here and code fails to compile
}
docx_option.unwrap().write_file("foo.docx").unwrap();

Also see: DocxFile::from_reader.

Similar Projects

bokuweb/docx-rs: A .docx file writer with Rust/WebAssembly.

License

MIT

Dependencies

~3–4MB
~73K SLoC