docxide-pdf 0.7.0

CLI and Library for converting DOCX files to PDF, matching Microsoft Word's output as closely as possible
Documentation
mod docx;
mod error;
mod fonts;
mod model;
mod pdf;

pub use error::Error;

use std::path::Path;
use std::time::Instant;

pub fn convert_docx_to_pdf(input: &Path, output: &Path) -> Result<(), Error> {
    let t0 = Instant::now();

    let doc = docx::parse(input)?;
    let t_parse = t0.elapsed();

    let bytes = pdf::render(&doc)?;
    let t_render = t0.elapsed();

    std::fs::write(output, &bytes).map_err(Error::Io)?;
    let t_total = t0.elapsed();

    log::info!(
        "Timing: parse={:.1}ms, render={:.1}ms, write={:.1}ms, total={:.1}ms (output {} bytes)",
        t_parse.as_secs_f64() * 1000.0,
        (t_render - t_parse).as_secs_f64() * 1000.0,
        (t_total - t_render).as_secs_f64() * 1000.0,
        t_total.as_secs_f64() * 1000.0,
        bytes.len(),
    );

    Ok(())
}

pub fn convert_docx_bytes_to_pdf(input: &[u8], output: &Path) -> Result<(), Error> {
    let t0 = Instant::now();

    let doc = docx::parse_bytes(input)?;
    let t_parse = t0.elapsed();

    let bytes = pdf::render(&doc)?;
    let t_render = t0.elapsed();

    std::fs::write(output, &bytes).map_err(Error::Io)?;
    let t_total = t0.elapsed();

    log::info!(
        "Timing: parse={:.1}ms, render={:.1}ms, write={:.1}ms, total={:.1}ms (output {} bytes)",
        t_parse.as_secs_f64() * 1000.0,
        (t_render - t_parse).as_secs_f64() * 1000.0,
        (t_total - t_render).as_secs_f64() * 1000.0,
        t_total.as_secs_f64() * 1000.0,
        bytes.len(),
    );

    Ok(())
}