项目地址资源类型地址源码仓库https://github.com/developer0hye/office2pdfcrates.iohttps://crates.io/crates/office2pdf文档地址https://docs.rs/office2pdf️ 项目结构根据Cargo.toml配置项目采用Cargo Workspace管理包含两个核心成员成员路径说明核心库crates/office2pdf提供转换功能的 Rust 库可嵌入其他项目命令行工具crates/office2pdf-cli基于核心库构建的 CLI 工具独立使用 依赖管理Patch 机制项目通过[patch.crates-io]精确控制关键依赖确保转换质量和稳定性依赖库作用Patch 来源修复目的umya-spreadsheetXLSX 文件解析developer0hye/umya-spreadsheetfix/panic-safety-v2修复 panic 安全性问题增强条件格式DataBar、IconSet解析docx-rsDOCX 文件解析developer0hye/docx-rsfix/parse-tolerance增强解析容错性处理格式不规范的 Word 文档支持嵌入式字体提取这种设计保证了底层解析库的稳定性同时不影响使用office2pdf作为依赖的外部项目。✨ 核心特性纯 Rust 实现 · 零外部依赖 · 无需 LibreOffice/Chromium/Docker格式支持的功能DOCX段落、行内格式粗体/斜体/下划线/颜色、表格、图片、列表、页眉/页脚、页面设置PPTX幻灯片、文本框、形状、表格含主题样式、图片、幻灯片母版、演讲者备注、渐变背景、阴影/反射效果XLSX工作表、单元格格式、合并单元格、列宽/行高、条件格式数据条、图标集 高级功能PDF/A-2b— 归档级 PDF 输出支持嵌入式字体提取— 自动提取 DOCX/PPTX 中嵌入的字体并用于转换macOS Office 字体自动发现— 自动搜索 PowerPoint/Word/Excel 捆绑字体和 Office 云字体缓存WASM 支持— 可在浏览器和 Node.js 中运行通过可选wasm特性跨平台— Windows / Linux / macOS 原生支持 版本与兼容性根据Cargo.toml配置配置项值说明Rust Edition2024使用最新的 Rust 语言标准MSRV1.89最低支持的 Rust 编译器版本最新版本v0.5.02026-03-15持续迭代更新 安装方式作为 Rust 库在Cargo.toml中添加[dependencies] office2pdf 0.4注意如果您的项目与office2pdf使用相同的依赖如umya-spreadsheet、docx-rsCargo 会自动合并依赖版本无需额外配置。命令行工具cargoinstalloffice2pdf-cli浏览器/WASMwasm-pack build crates/office2pdf--targetweb--featureswasm 快速上手库使用示例// 最简单的转换useoffice2pdf::convert;fnmain()-Result(),Boxdynstd::error::Error{letresultconvert(report.docx)?;std::fs::write(report.pdf,result.pdf)?;Ok(())}// 带选项的转换useoffice2pdf::config::{ConvertOptions,PaperSize};letoptionsConvertOptions{paper_size:Some(PaperSize::A4),..Default::default()};letresultoffice2pdf::convert_with_options(slides.pptx,options)?;std::fs::write(slides.pdf,result.pdf)?;// 内存转换字节流useoffice2pdf::config::Format;letdocx_bytesstd::fs::read(report.docx)?;letresultoffice2pdf::convert_bytes(docx_bytes,Format::Docx,ConvertOptions::default(),)?;std::fs::write(report.pdf,result.pdf)?;CLI 使用示例# 单文件转换office2pdf report.docx# 指定输出路径office2pdf report.docx-ooutput.pdf# 批量转换office2pdf *.docx--outdirpdfs/# 高级选项office2pdf slides.pptx--papera4--landscape# A4 横版office2pdf spreadsheet.xlsx--sheetsSheet1,Summary# 指定工作表office2pdf document.docx --pdf-a# PDF/A-2b 格式office2pdf report.docx --font-path /usr/share/fonts/custom# 自定义字体WASM 使用示例浏览器importinit,{convertDocxToPdf,convertToPdf}from./pkg/office2pdf.js;awaitinit();// 转换 DOCXconstdocxBytesnewUint8Array(awaitfile.arrayBuffer());constpdfBytesconvertDocxToPdf(docxBytes);// 或使用通用 APIconstpdfBytes2convertToPdf(xlsxBytes,xlsx);// 下载 PDFconstblobnewBlob([pdfBytes],{type:application/pdf});consturlURL.createObjectURL(blob);window.open(url);⚙️ CLI 选项完整列表选项说明-o, --output PATH输出文件路径仅单文件输入--outdir DIR批量转换时的输出目录--paper SIZE纸张大小a4、letter、legal--landscape强制横向布局--pdf-a生成 PDF/A-2b 合规输出--sheets NAMESXLSX 工作表过滤逗号分隔--slides RANGEPPTX 幻灯片范围如1-5或3--font-path DIR额外字体目录可重复使用 项目信息项目属性值最新版本v0.5.02026-03-15开源协议Apache License 2.0Stars / Forks39 / 2编程语言Rust 99.5%作者Yonghye Kwon (developer0hye)Rust Edition2024MSRV1.89 适用场景后端服务— 部署为独立 PDF 转换微服务无需额外依赖桌面应用— 集成到 Rust 桌面软件中提供原生转换能力Web 应用— 通过 WASM 在浏览器端直接转换无需上传服务器批处理脚本— 使用 CLI 工具批量处理大量 Office 文档 技术实现亮点Workspace 架构通过 Cargo Workspace 分离核心库和 CLI 工具实现代码复用CLI 直接依赖核心库避免重复实现独立发布两个 crate 可分别发布到 crates.io统一配置共享edition、rust-version、license等元数据依赖修补策略使用[patch.crates-io]确保关键依赖的稳定性精准控制在不发布上游新版本的情况下应用修复临时方案待上游合并后可移除 patch透明性用户无感知但保证转换质量字体处理嵌入式字体提取自动从 PPTX/DOCX 中提取并去混淆macOS 智能发现自动搜索 Office 应用字体和云字体缓存跨平台字体回退统一的多平台字体处理逻辑 许可证Licensed under Apache License, Version 2.0.总结office2pdf是一个纯 Rust 实现的 Office 文档转 PDF 库通过 Workspace 管理核心库和 CLI使用 Patch 机制精确控制关键依赖支持 DOCX、PPTX、XLSX 格式并提供库、CLI 和 WASM 三种使用方式。其零外部依赖、高保真转换和跨平台特性使其成为 Rust 生态中 Office 文档处理的优秀选择。