Skip to content

Latest commit

 

History

History
3260 lines (3186 loc) · 133 KB

File metadata and controls

3260 lines (3186 loc) · 133 KB

MiniPdf


一个极简、轻量化的 .NET 库,用于将 Office 文件转换为 PDF。

👉 在线演示 — 在浏览器中快速体验,无需安装。

⚠️ 由于浏览器可用字体有限,渲染效果可能不够理想。建议在本地电脑上测试以获得最佳效果。


QQ群 - 1群 : 813100564 / 2群 : 579033769 / 3群 : 625362917 / 4群 : 907750429


功能特性

  • Excel 转 PDF — 将 .xlsx 文件转换为 PDF
  • Word 转 PDF — 将 .docx 文件转换为 PDF
  • 极少依赖 — 轻量化设计,几乎仅使用 .NET 内置 API
  • Serverless 就绪 — 无需 COM、无需安装 Office、无需 Adobe Acrobat — 有 .NET 即可运行
  • 标准 PDF 1.4 格式输出
  • 完全开源免费 — 基于 Apache 2.0 协议,可自由商用,无任何限制,注明出处即可。欢迎提交 PR 一起贡献!
  • 图表 — 目前支持尚不完善

注意: MiniPdf 目前只能处理基本的转换需求。对于复杂或高度自定义的 Office 文档,转换效果可能不够理想。如果您遇到兼容性问题,欢迎提交 Issue 或发起 Pull Request,一起让项目变得更好!

快速开始

通过 NuGet 安装

dotnet add package MiniPdf

使用方式

using MiniSoftware;

// Excel 转 PDF
MiniPdf.ConvertToPdf("data.xlsx", "output.pdf");

// Word 转 PDF
MiniPdf.ConvertToPdf("report.docx", "output.pdf");

// 文件转字节数组
byte[] pdfBytes = MiniPdf.ConvertToPdf("data.xlsx");

// 流转字节数组
using var stream = File.OpenRead("data.xlsx");
byte[] pdfBytes = MiniPdf.ConvertToPdf(stream);

自定义字体

如果运行环境系统字体有限(例如容器或 Blazor WASM),请在转换前先注册字体。

using MiniSoftware;

// 建议在应用启动时注册一个或多个字体
MiniPdf.RegisterFont("NotoSansSC", File.ReadAllBytes("Fonts/NotoSansSC-Regular.ttf"));
MiniPdf.RegisterFont("NotoColorEmoji", File.ReadAllBytes("Fonts/NotoColorEmoji.ttf"));

MiniPdf.ConvertToPdf("report.docx", "report.pdf");

说明:

  • 支持传入 TrueType .ttf 和 TrueType Collection .ttc 字体字节。
  • 建议仅在启动阶段注册一次,避免重复注册。
  • 已注册字体会优先于系统字体参与匹配。

命令行工具

MiniPdf 还提供命令行工具 MiniPdf.Cli,无需编写代码即可快速转换文件。

安装

dotnet tool install --global MiniPdf.Cli

使用方式

# 将 Excel 转为 PDF(输出: data.pdf)
minipdf data.xlsx

# 将 Word 转为 PDF
minipdf report.docx

# 指定输出路径
minipdf report.docx -o /path/to/output.pdf

# 注册自定义字体(适用于容器/无头环境)
minipdf report.docx --fonts ./Fonts

命令说明

命令 说明
minipdf <file> .xlsx / .docx 转换为 PDF
minipdf convert <file> -o <out> 转换并指定输出路径
minipdf --version 显示版本
minipdf --help 显示帮助

基准测试

MiniPdf 的输出与 LibreOffice 作为参考渲染器进行对比,共 373 个测试用例

报告 用例数 🟢 优秀 (≥90%) 🟡 可接受 (70%–90%) 🔴 待改进 (<70%) 平均分
XLSX 转 PDF 191 175 16 0 96.9%
DOCX 转 PDF 180 178 2 0 97.6%
Issue XLSX 文件 2 1 1 0 83.8%
合计 373 354 19 0 97.2%

评分方式:文本相似度 40% + 视觉相似度 40% + 页数 20%

详细对比报告

视觉对比

所有测试用例对比 MiniPdf 输出与 LibreOffice 参考。多页结果仅显示第 1 页。

MiniPdfLibreOffice(参考)
classic01 Basic table with headers 🟢 99.9%
classic02 Multiple worksheets 🟢 99.8%
classic03 Empty workbook 🟢 100.0%
classic04 Single cell 🟢 100.0%
classic05 Wide table 🟢 99.8%
classic06 Tall table 🟢 97.8%
classic07 Numbers only 🟢 100.0%
classic08 Mixed text and numbers 🟢 99.9%
classic09 Long text 🟢 98.4%
classic10 Special xml characters 🟢 99.9%
classic11 Sparse rows 🟢 100.0%
classic12 Sparse columns 🟢 99.9%
classic13 Date strings 🟢 99.9%
classic14 Decimal numbers 🟢 99.9%
classic15 Negative numbers 🟢 99.9%
classic16 Percentage strings 🟢 99.4%
classic17 Currency strings 🟢 99.9%
classic18 Large dataset 🟢 95.7%
classic19 Single column list 🟢 99.9%
classic20 All empty cells 🟢 100.0%
classic21 Header only 🟢 99.9%
classic22 Long sheet name 🟢 99.9%
classic23 Unicode text 🟢 91.3%
classic24 Red text 🟢 99.9%
classic25 Multiple colors 🟢 99.8%
classic26 Inline strings 🟢 99.9%
classic27 Single row 🟢 99.9%
classic28 Duplicate values 🟢 99.9%
classic29 Formula results 🟢 99.9%
classic30 Mixed empty and filled sheets 🟢 100.0%
classic31 Bold header row 🟢 99.9%
classic32 Right aligned numbers 🟢 99.9%
classic33 Centered text 🟢 99.9%
classic34 Explicit column widths 🟢 99.9%
classic35 Explicit row heights 🟢 99.5%
classic36 Merged cells 🟢 99.9%
classic37 Freeze panes 🟢 99.6%
classic38 Hyperlink cell 🟢 99.9%
classic39 Financial table 🟢 99.8%
classic40 Scientific notation 🟢 99.9%
classic41 Integer vs float 🟢 99.9%
classic42 Boolean values 🟢 99.6%
classic43 Inventory report 🟢 99.5%
classic44 Employee roster 🟢 98.0%
classic45 Sales by region 🟢 99.9%
classic46 Grade book 🟢 99.6%
classic47 Time series 🟢 99.3%
classic48 Survey results 🟢 99.6%
classic49 Contact list 🟢 98.5%
classic50 Budget vs actuals 🟢 99.6%
classic51 Product catalog 🟢 98.5%
classic52 Pivot summary 🟢 99.6%
classic53 Invoice 🟢 99.5%
classic54 Multi level header 🟢 99.8%
classic55 Error values 🟢 99.8%
classic56 Alternating row colors 🟢 99.6%
classic57 Cjk only 🟢 91.1%
classic58 Mixed numeric formats 🟢 99.5%
classic59 Multi sheet summary 🟢 99.9%
classic60 Large wide table 🟢 97.4%
classic61 Product card with image 🟢 99.9%
classic62 Company logo header 🟢 99.6%
classic63 Two products side by side 🟢 99.8%
classic64 Employee directory with photo 🟢 99.1%
classic65 Inventory with product photos 🟢 99.4%
classic66 Invoice with logo 🟢 99.2%
classic67 Real estate listing 🟢 99.8%
classic68 Restaurant menu 🟢 98.6%
classic69 Image only sheet 🟢 100.0%
classic70 Product catalog with images 🟢 99.2%
classic71 Multi sheet with images 🟢 99.8%
classic72 Bar chart image with data 🟢 99.5%
classic73 Event flyer with banner 🟢 99.6%
classic74 Dashboard with kpi image 🟢 97.9%
classic75 Certificate with seal 🟢 99.5%
classic76 Product image grid 🟢 99.7%
classic77 News article with hero image 🟢 99.6%
classic78 Small icon per row 🟢 99.2%
classic79 Wide panoramic banner 🟢 99.8%
classic80 Portrait tall image 🟢 99.8%
classic81 Step by step with images 🟢 99.7%
classic82 Before after images 🟢 99.4%
classic83 Color swatch palette 🟢 99.4%
classic84 Travel destination cards 🟢 99.6%
classic85 Lab results with image 🟢 99.2%
classic86 Software screenshot features 🟢 98.7%
classic87 Sports results with logos 🟢 99.8%
classic88 Image after data 🟢 99.7%
classic89 Nutrition label with image 🟢 99.5%
classic90 Project status with milestones 🟢 99.0%
classic91 Simple bar chart 🟢 96.6%
classic92 Horizontal bar chart 🟢 96.9%
classic93 Line chart 🟢 93.2%
classic94 Pie chart 🟢 97.2%
classic95 Area chart 🟡 76.4%
classic96 Scatter chart 🟢 94.8%
classic97 Doughnut chart 🟢 97.5%
classic98 Radar chart 🟢 95.1%
classic99 Bubble chart 🟢 92.0%
classic100 Stacked bar chart 🟢 95.0%
classic101 Percent stacked bar 🟢 93.6%
classic102 Line chart with markers 🟢 93.0%
classic103 Pie chart with labels 🟡 86.9%
classic104 Combo bar line chart 🟡 81.6%
classic105 3d bar chart 🟡 85.8%
classic106 3d pie chart 🟢 96.7%
classic107 Multi series line 🟡 80.6%
classic108 Stacked area chart 🟢 94.4%
classic109 Scatter with trendline 🟢 92.3%
classic110 Chart with legend 🟡 84.7%
classic111 Chart with axis labels 🟢 92.1%
classic112 Multiple charts 🟡 85.4%
classic113 Chart sheet 🟡 86.4%
classic114 Chart large dataset 🟢 91.6%
classic115 Chart negative values 🟢 92.1%
classic116 Percent stacked area 🟢 93.8%
classic117 Stock ohlc chart 🟡 80.9%
classic118 Bar chart custom colors 🟢 95.5%
classic119 Dashboard multi charts 🟢 92.1%
classic120 Chart with date axis 🟡 76.1%
classic121 Thin borders 🟢 99.7%
classic122 Thick outer thin inner 🟢 99.6%
classic123 Dashed borders 🟢 99.1%
classic124 Colored borders 🟢 99.7%
classic125 Solid fills 🟢 99.2%
classic126 Dark header 🟢 99.5%
classic127 Font styles 🟢 99.6%
classic128 Font sizes 🟢 99.0%
classic129 Alignment combos 🟢 99.8%
classic130 Wrap and indent 🟢 99.5%
classic131 Number formats 🟢 99.6%
classic132 Striped table 🟢 99.0%
classic133 Gradient rows 🟢 99.6%
classic134 Heatmap 🟢 98.8%
classic135 Bottom border only 🟢 99.8%
classic136 Financial report styled 🟢 99.3%
classic137 Checkerboard 🟢 98.4%
classic138 Color grid 🟢 99.4%
classic139 Pattern fills 🟢 99.2%
classic140 Rotated text 🟢 98.1%
classic141 Mixed edge borders 🟢 99.7%
classic142 Styled invoice 🟢 98.3%
classic143 Colored tabs 🟢 100.0%
classic144 Note style cells 🟢 99.6%
classic145 Status badges 🟢 99.1%
classic146 Double border table 🟢 99.6%
classic147 Multi sheet styled 🟢 99.7%
classic148 Frozen styled grid 🟢 97.3%
classic149 Merged styled sections 🟢 98.7%
classic150 Kitchen sink styles 🟢 97.5%
classic151 Multilingual greetings 🟢 93.5%
classic152 Emoji sampler 🟢 91.1%
classic153 Currency symbols 🟢 98.5%
classic154 Math symbols 🟢 95.7%
classic155 Diacritical marks 🟢 99.8%
classic156 Rtl bidi text 🟡 84.0%
classic157 Cjk extended 🟢 91.3%
classic158 Emoji skin tones 🟢 99.3%
classic159 Zwj emoji 🟢 90.6%
classic160 Punctuation marks 🟢 94.4%
classic161 Box drawing 🟢 95.0%
classic162 Cjk emoji styled 🟡 86.5%
classic163 Cyrillic alphabets 🟢 99.6%
classic164 Indic scripts 🟡 87.4%
classic165 Southeast asian 🟢 96.0%
classic166 Emoji progress 🟢 98.6%
classic167 Musical symbols 🟢 90.0%
classic168 Mixed ltr rtl styled 🟢 94.5%
classic169 Korean invoice 🟡 88.4%
classic170 Emoji dashboard 🟢 96.3%
classic171 Ipa phonetic 🟢 97.6%
classic172 Emoji timeline 🟢 95.3%
classic173 African languages 🟢 90.8%
classic174 Technical symbols 🟢 94.4%
classic175 Multiscript catalog 🟢 92.6%
classic176 Combining characters 🟢 94.5%
classic177 Emoji calendar 🟡 88.4%
classic178 Caucasus ethiopic 🟢 96.9%
classic179 Emoji inventory 🟢 91.0%
classic180 Polyglot paragraph 🟢 93.6%
classic181 Feedback tracker with images 🟢 99.4%
classic182 Dense long text columns 🟢 96.5%
classic183 Mixed content grid 🟢 99.4%
classic184 Wide narrow columns 🟢 98.4%
classic185 Tall rows vertical align 🟢 99.7%
classic186 Multi sheet image report 🟢 99.6%
classic187 Bug report with screenshots 🟢 98.2%
classic188 Merged header with images 🟢 99.5%
classic189 Alternating image text rows 🟢 95.3%
classic190 Dashboard kpi images 🟢 99.5%
classic191 Payroll calculator 🟡 89.5%

DOCX 基准测试

MiniPdf DOCX 的输出与 LibreOffice 作为参考渲染器进行对比,涵盖 180 个经典测试用例

类别 数量 阈值
🟢 优秀 175 ≥ 90%
🟡 可接受 16 70% – 90%
🔴 待改进 0 < 70%

整体平均分: 96.9%(文本相似度 40% + 视觉相似度 40% + 页数 20%)

DOCX 视觉对比

所有 DOCX 测试用例对比 MiniPdf 输出与 LibreOffice 参考。多页结果仅显示第 1 页。

MiniPdfLibreOffice (Reference)
classic01 Basic table with headers 🟢 99.9%
classic02 Multiple worksheets 🟢 99.8%
classic03 Empty workbook 🟢 100.0%
classic04 Single cell 🟢 100.0%
classic05 Wide table 🟢 99.8%
classic06 Tall table 🟢 97.8%
classic07 Numbers only 🟢 100.0%
classic08 Mixed text and numbers 🟢 99.9%
classic09 Long text 🟢 98.4%
classic10 Special xml characters 🟢 99.9%
classic11 Sparse rows 🟢 100.0%
classic12 Sparse columns 🟢 99.9%
classic13 Date strings 🟢 99.9%
classic14 Decimal numbers 🟢 99.9%
classic15 Negative numbers 🟢 99.9%
classic16 Percentage strings 🟢 99.4%
classic17 Currency strings 🟢 99.9%
classic18 Large dataset 🟢 95.7%
classic19 Single column list 🟢 99.9%
classic20 All empty cells 🟢 100.0%
classic21 Header only 🟢 99.9%
classic22 Long sheet name 🟢 99.9%
classic23 Unicode text 🟢 91.3%
classic24 Red text 🟢 99.9%
classic25 Multiple colors 🟢 99.8%
classic26 Inline strings 🟢 99.9%
classic27 Single row 🟢 99.9%
classic28 Duplicate values 🟢 99.9%
classic29 Formula results 🟢 99.9%
classic30 Mixed empty and filled sheets 🟢 100.0%
classic31 Bold header row 🟢 99.9%
classic31 Bold header row 🟢 99.9%
classic32 Right aligned numbers 🟢 99.9%
classic32 Right aligned numbers 🟢 99.9%
classic33 Centered text 🟢 99.9%
classic33 Centered text 🟢 99.9%
classic34 Explicit column widths 🟢 99.9%
classic34 Explicit column widths 🟢 99.9%
classic35 Explicit row heights 🟢 99.5%
classic35 Explicit row heights 🟢 99.5%
classic36 Merged cells 🟢 99.9%
classic36 Merged cells 🟢 99.9%
classic37 Freeze panes 🟢 99.6%
classic37 Freeze panes 🟢 99.6%
classic38 Hyperlink cell 🟢 99.9%
classic38 Hyperlink cell 🟢 99.9%
classic39 Financial table 🟢 99.8%
classic39 Financial table 🟢 99.8%
classic40 Scientific notation 🟢 99.9%
classic40 Scientific notation 🟢 99.9%
classic41 Integer vs float 🟢 99.9%
classic41 Integer vs float 🟢 99.9%
classic42 Boolean values 🟢 99.6%
classic42 Boolean values 🟢 99.6%
classic43 Inventory report 🟢 99.5%
classic43 Inventory report 🟢 99.5%
classic44 Employee roster 🟢 98.0%
classic44 Employee roster 🟢 98.0%
classic45 Sales by region 🟢 99.9%
classic45 Sales by region 🟢 99.9%
classic46 Grade book 🟢 99.6%
classic46 Grade book 🟢 99.6%
classic47 Time series 🟢 99.3%
classic47 Time series 🟢 99.3%
classic48 Survey results 🟢 99.6%
classic48 Survey results 🟢 99.6%
classic49 Contact list 🟢 98.5%
classic49 Contact list 🟢 98.5%
classic50 Budget vs actuals 🟢 99.6%
classic50 Budget vs actuals 🟢 99.6%
classic51 Product catalog 🟢 98.5%
classic51 Product catalog 🟢 98.5%
classic52 Pivot summary 🟢 99.6%
classic52 Pivot summary 🟢 99.6%
classic53 Invoice 🟢 99.5%
classic53 Invoice 🟢 99.5%
classic54 Multi level header 🟢 99.8%
classic54 Multi level header 🟢 99.8%
classic55 Error values 🟢 99.8%
classic55 Error values 🟢 99.8%
classic56 Alternating row colors 🟢 99.6%
classic56 Alternating row colors 🟢 99.6%
classic57 Cjk only 🟢 91.1%
classic57 Cjk only 🟢 91.1%
classic58 Mixed numeric formats 🟢 99.5%
classic58 Mixed numeric formats 🟢 99.5%
classic59 Multi sheet summary 🟢 99.9%
classic59 Multi sheet summary 🟢 99.9%
classic60 Large wide table 🟢 97.4%
classic60 Large wide table 🟢 97.4%
classic61 Product card with image 🟢 99.9%
classic62 Company logo header 🟢 99.6%
classic63 Two products side by side 🟢 99.8%
classic64 Employee directory with photo 🟢 99.1%
classic65 Inventory with product photos 🟢 99.4%
classic66 Invoice with logo 🟢 99.2%
classic67 Real estate listing 🟢 99.8%
classic68 Restaurant menu 🟢 98.6%
classic69 Image only sheet 🟢 100.0%
classic70 Product catalog with images 🟢 99.2%
classic71 Multi sheet with images 🟢 99.8%
classic72 Bar chart image with data 🟢 99.5%
classic73 Event flyer with banner 🟢 99.6%
classic74 Dashboard with kpi image 🟢 97.9%
classic75 Certificate with seal 🟢 99.5%
classic76 Product image grid 🟢 99.7%
classic77 News article with hero image 🟢 99.6%
classic78 Small icon per row 🟢 99.2%
classic79 Wide panoramic banner 🟢 99.8%
classic80 Portrait tall image 🟢 99.8%
classic81 Step by step with images 🟢 99.7%
classic82 Before after images 🟢 99.4%
classic83 Color swatch palette 🟢 99.4%
classic84 Travel destination cards 🟢 99.6%
classic85 Lab results with image 🟢 99.2%
classic86 Software screenshot features 🟢 98.7%
classic87 Sports results with logos 🟢 99.8%
classic88 Image after data 🟢 99.7%
classic89 Nutrition label with image 🟢 99.5%
classic90 Project status with milestones 🟢 99.0%
classic91 Simple bar chart 🟢 96.6%
classic92 Horizontal bar chart 🟢 96.9%
classic93 Line chart 🟢 93.2%
classic94 Pie chart 🟢 97.2%
classic95 Area chart 🟡 76.4%
classic96 Scatter chart 🟢 94.8%
classic97 Doughnut chart 🟢 97.5%
classic98 Radar chart 🟢 95.1%
classic99 Bubble chart 🟢 92.0%
classic100 Stacked bar chart 🟢 95.0%
classic101 Percent stacked bar 🟢 93.6%
classic102 Line chart with markers 🟢 93.0%
classic103 Pie chart with labels 🟡 86.9%
classic104 Combo bar line chart 🟡 81.6%
classic105 3d bar chart 🟡 85.8%
classic106 3d pie chart 🟢 96.7%
classic107 Multi series line 🟡 80.6%
classic108 Stacked area chart 🟢 94.4%
classic109 Scatter with trendline 🟢 92.3%
classic110 Chart with legend 🟡 84.7%
classic111 Chart with axis labels 🟢 92.1%
classic112 Multiple charts 🟡 85.4%
classic113 Chart sheet 🟡 86.4%
classic114 Chart large dataset 🟢 91.6%
classic115 Chart negative values 🟢 92.1%
classic116 Percent stacked area 🟢 93.8%
classic117 Stock ohlc chart 🟡 80.9%
classic118 Bar chart custom colors 🟢 95.5%
classic119 Dashboard multi charts 🟢 92.1%
classic120 Chart with date axis 🟡 76.1%
classic121 Thin borders 🟢 99.7%
classic122 Thick outer thin inner 🟢 99.6%
classic123 Dashed borders 🟢 99.1%
classic124 Colored borders 🟢 99.7%
classic125 Solid fills 🟢 99.2%
classic126 Dark header 🟢 99.5%
classic127 Font styles 🟢 99.6%
classic128 Font sizes 🟢 99.0%
classic129 Alignment combos 🟢 99.8%
classic130 Wrap and indent 🟢 99.5%
classic131 Number formats 🟢 99.6%
classic132 Striped table 🟢 99.0%
classic133 Gradient rows 🟢 99.6%
classic134 Heatmap 🟢 98.8%
classic135 Bottom border only 🟢 99.8%
classic136 Financial report styled 🟢 99.3%
classic137 Checkerboard 🟢 98.4%
classic138 Color grid 🟢 99.4%
classic139 Pattern fills 🟢 99.2%
classic140 Rotated text 🟢 98.1%
classic141 Mixed edge borders 🟢 99.7%
classic142 Styled invoice 🟢 98.3%
classic143 Colored tabs 🟢 100.0%
classic144 Note style cells 🟢 99.6%
classic145 Status badges 🟢 99.1%
classic146 Double border table 🟢 99.6%
classic147 Multi sheet styled 🟢 99.7%
classic148 Frozen styled grid 🟢 97.3%
classic149 Merged styled sections 🟢 98.7%
classic150 Kitchen sink styles 🟢 97.5%
classic181 Feedback tracker with images 🟢 99.4%
classic182 Dense long text columns 🟢 96.5%
classic183 Mixed content grid 🟢 99.4%
classic184 Wide narrow columns 🟢 98.4%
classic185 Tall rows vertical align 🟢 99.7%
classic186 Multi sheet image report 🟢 99.6%
classic187 Bug report with screenshots 🟢 98.2%
classic188 Merged header with images 🟢 99.5%
classic189 Alternating image text rows 🟢 95.3%
classic190 Dashboard kpi images 🟢 99.5%
classic191 Payroll calculator 🟡 89.5%

许可证

本项目基于 Apache License 2.0 授权。