Skip to main content

rust_docx/
lib.rs

1//! Native and WebAssembly-compatible Word document parsing, modeling, and serialization.
2
3pub mod chart;
4pub mod doc;
5pub mod emf;
6pub mod model;
7pub mod package;
8pub mod parse;
9pub mod revisions;
10pub mod serialize;
11pub mod source_graph;
12pub mod structured;
13pub mod table_grid;
14mod wmf;
15pub mod xml;
16mod xml_index;
17pub mod zip;
18
19pub use chart::{extract_chart_data, ChartCategory, ChartData, ChartPoint, ChartSeries};
20pub use doc::{is_doc_format, parse_doc};
21pub use model::*;
22pub use package::*;
23pub use parse::build_doc_model;
24pub use revisions::{
25    DocumentRevision, ReviewedDocument, RevisionKind, RevisionProperties, RevisionScope,
26    WordProperty,
27};
28pub use source_graph::{document_source_graph, DocumentSourceGraph};
29pub use structured::{
30    extract_document_blocks, extract_document_blocks_with_options,
31    extract_document_blocks_with_revisions, BlockDetails, BlockType, DocumentBlock, DocumentWord,
32    ExtractDocumentBlocksOptions, ParagraphDetails, ParagraphInline, SourceRef, StructuredDocument,
33    TableCellDetails,
34};
35
36pub fn parse_document_blocks(bytes: &[u8]) -> Result<StructuredDocument, String> {
37    parse_document_blocks_with_options(bytes, ExtractDocumentBlocksOptions::default())
38}
39
40pub fn parse_document_blocks_with_options(
41    bytes: &[u8],
42    options: ExtractDocumentBlocksOptions,
43) -> Result<StructuredDocument, String> {
44    let package = parse_document_bytes(bytes)?;
45    Ok(extract_document_blocks_with_options(
46        &build_doc_model(&package),
47        options,
48    ))
49}
50
51/// Parse Word bytes and return current blocks together with their tracked revisions.
52pub fn parse_document_blocks_with_revisions(
53    bytes: &[u8],
54    options: ExtractDocumentBlocksOptions,
55) -> Result<ReviewedDocument, String> {
56    let package = parse_document_bytes(bytes)?;
57    Ok(extract_document_blocks_with_revisions(
58        &build_doc_model(&package),
59        options,
60    ))
61}
62
63pub use serialize::{
64    can_preserve_image_paint_source, model_to_document_xml, serialize_doc_model, serialize_docx,
65    try_serialize_doc_model, validate_image_paint_bounds,
66};
67pub use zip::{create_minimal_docx_package, package_to_bytes, parse_docx};
68
69/// Parses either a DOCX (OOXML zip) or a legacy Word 97-2003 binary `.doc`
70/// file, detected by magic bytes, into the same in-memory package shape.
71pub fn parse_document_bytes(bytes: &[u8]) -> Result<OoxmlPackage, String> {
72    if is_doc_format(bytes) {
73        parse_doc(bytes)
74    } else {
75        parse_docx(bytes)
76    }
77}