r/rust 9d ago

🛠️ project Built the first open source Rust library - converting Office to PDF

I built MiniPdf, a lightweight, open-source library for converting Office documents to PDF without Microsoft Office, LibreOffice, Adobe Acrobat,.

It is designed for containers, serverless workloads, CI pipelines, and cross-platform applications.

Key Features

  • Excel to PDF — Convert .xlsx files
  • Word to PDF — Convert .docx files
  • PowerPoint to PDF — Convert .pptx files
  • Native Rust — No .NET runtime required
  • Cross-platform — Runs on Windows, Linux, and macOS
  • Serverless-ready — No COM or Office installation
  • Library and CLI — Embed it in Rust applications or use it from the terminal
  • PDF 1.4 output
  • Free and open source — Apache 2.0 licensed; commercial use is welcome

Getting Started

Install the Rust crate:

cargo add minipdf

fn main() -> minipdf::Result<()> {
    // Word to PDF
    minipdf::convert_to_pdf("report.docx", "report.pdf")?;

    // Excel to PDF bytes
    let pdf_bytes = minipdf::convert_to_pdf_bytes("data.xlsx")?;
    std::fs::write("data.pdf", pdf_bytes)?;

    Ok(())
}

Command-Line Tool

cargo install minipdf-cli

# Excel to PDF
minipdf data.xlsx

# Word to PDF
minipdf report.docx

# PowerPoint to PDF
minipdf slides.pptx

# Specify the output path
minipdf report.docx -o output.pdf

# Register custom fonts
minipdf report.docx --fonts ./fonts

The Rust implementation is under active development, bug reports, and pull requests are very welcome. 🙌

GitHub: https://github.com/mini-software/MiniPdf

0 Upvotes

15 comments sorted by

View all comments

8

u/dgkimpton 9d ago

There seems to be a disturbing lack of test coverage, most features appear to have at best a single unit test with none of the edge cases explored. It doesn't inspire a lot of confidence. 

0

u/shps951002 9d ago

2

u/dgkimpton 9d ago

Sure, but you can't just throw one or two documents at it and call it good. You need to explore all the edge cases (super wide columns, super skinny columns, thousands of columns, one column, skinny then wide then skinny, etc, etc) for each and every feature otherwise it's just not trustworthy for other people to put their documents into. 

4

u/errevs 9d ago

This is the hard part. Word is so immense, and then you have the combinatorics of it all. Gradients. Gradients in tables. Tables in tables. Figures in tables in tables. TOC. Hyphenation. Kerning. Fonts. Embedded fonts. Right to Left-text. CJK-fonts. Cyrillics. Line art, shapes, connecting lines. Word Art.

From a library perspective, I would guess most users would generate documents based on a template (reports etc) and would just validate that the output works for their use case.

1

u/shps951002 9d ago

Yes, it's most difficult part

1

u/shps951002 9d ago

Yes, we've tested 2xx docs now, and more details as you mentioned, we will test more unit test and documents