前言
系统开发时,PDF文件导出是很常见的功能,市面上主流方式是将HTML转PDF:后端将样式和数据拼装成HTML文件,调用wkhtmltopdf库或无头浏览器,将渲染结果转换成PDF文件。这种方式存在比较多弊端,需要安装字体,分页基于CSS样式识别,跨页时表头容易丢失,模版一变动就需要同步调整样式...
今天给大家安利一款更好用的PDF转换库。它不经过HTML,而是用C#链式API描述页面、表格、图片,分页规则,使用专有引擎计算布局,确保生成的PDF可以输出成文件、流、图片,支持合并、加密PDF。
简介
QuestPDF是一款功能完善、开源的PDF生成库,专为发票、报表、对账单等PDF文件导出场景设计,可解决传统PDF方案样式异常、跨页显示排版错乱等难题。
工具内置了60余项布局和内容功能,覆盖页面、页眉页脚、表格跨页、富文本、图片与SVG、内容流控制、多语言与RTL、文档合并拆分、加密与权限、PDF/A归档、PDF/UA无障碍、ZUGFeRD电子发票等模块,所有布局都采用内置引擎计算,不依赖浏览器,简单方便。
它基于纯.NET库实现,不依赖外部原生组件,通过C#链式API编写文档布局,将文字、图片、表格等元素组合成完整文档,它支持在Windows、Linux、macOS以及Docker、Kubernetes环境下运行,适合需要生成发票、报表、对账单、数据导出文件、批量生成文档等报表场景的系统使用。
解决痛点
传统HTML转PDF的模式弊端明显,浏览器渲染结果和CSS版本、字体安装、容器环境相关,转换成PDF文件时容易出现:表格跨页断行、页脚压字等问题,而且wkhtmltopdf库也已停止维护。
该库使用专用布局引擎计算分页与尺寸,表格支持表头跨页重复,内容流有禁止分页、预留空间、整块显示等显式开关,渲染结果和运行环境无关,更适合输出PDF文档场景使用。
iText基于AGPL协议,闭源商用需要购买商业授权,Aspose则是按开发者和部署方式计费,大部分中小型企业承担不起。
该库源码开放,年营收低于100万美元的组织可免费使用,不限开发者与服务器数量,各档功能一致,可满足大部分用户的使用需求。
传统模式下的PDF转换方式,在转换大数据量文件时,容易出现内存飙升,字体、图片不压缩等问题,服务器容易被压垮。
该库内置延迟加载、字体子集化、图片压缩、共享缓存等功能,官方真实测试场景下量级为每秒数千页,天然适合高吞吐场景。
功能列表
- 支持页面尺寸、边距、页眉、页脚,以及横向、纵向、多栏布局等设置,可组合宽高、对齐、内边距等设置,控制不同内容在页面中的位置。
- 支持表格单元格跨行跨列、样式设置,跨页重复表头和表尾等功能,可进行分页、整块展示、预留空间等配置,满足不同用户需求。
支持PNG、JPEG、WebP位图、SVG矢量图等图片方式,自动保持宽高比并做分辨率优化,同一图片在多处引用时共享缓存,减少内存与文件体积。
- 采用链式API从Document.Create开始逐层声明页面、内容、装饰区,IDE可以补全与跳转,简单明了。
- 内置专为PDF设计的布局计算,用于处理尺寸约束、相对宽度、自动分页、内容溢出等问题,支持行、列、图层、列表、内联、多栏、装饰区、区块,复杂版式按组合搭建。
- 支持段落样式、行内样式、字体族、字号继承,长文本自动换行、跨页续排等文本管理。
- 内置强制分页、禁止分页、预留空间、整块显示、停止分页等显式控制。
可加载已有PDF,按页码区间选择、重排、反转,再与其它文档合并。
支持按40位、128位、256位方式加密,用户密码和所有者密码可分开设置。
支持限制打印、复制、编辑权限和移除已有文档的加密,满足不同用户使用需求。
- 支持PDF/A-2b、2u、2a与PDF/A-3b、3u、3a归档标准和PDF/UA-1无障碍标准。
- 可生成PDF、SVG矢量图、PNG、JPEG、WEBP位图等方式输出。
- 支持延迟内容生成机制,大数据量报表按需构建,控制内存峰值,天然适合高并发使用。
- 支持调试区域、调试指针,异常信息能定位到具体元素和代码行,方便用户检查和修改。
功能截图
PDF格式:
深色模式:
放大器:
尺寸测量:
布局调试:
示例发票:
设置:
系统架构
项目结构:
└── src/dotnet/
├── library/
│ ├── QuestPDF/ # 主库:Fluent、Elements、Drawing、Skia、Qpdf
│ ├── QuestPDF.ReportSample/ # 报表示例
│ ├── QuestPDF.DocumentationExamples/ # 文档示例
│ ├── QuestPDF.ZUGFeRD/ # 电子发票支持
│ ├── QuestPDF.ConformanceTests/ # 合规测试
│ ├── QuestPDF.LayoutTests/ # 布局测试
│ ├── QuestPDF.VisualTests/ # 渲染比对测试
│ ├── QuestPDF.UnitTests/ # 单元测试
│ ├── QuestPDF.Benchmarks/ # 性能基准
│ └── QuestPDF.Companion.TestRunner/
└── package-tests/ # 打包验证:AOT、单文件、WebAPI、Worker、.NET Framework
├── README.md # 项目说明与快速开始
├── LICENSE.md # 社区许可与商业许可条款
├── .github/ # CI与仓库配置
技术栈:
运行时:
语言: C#
框架: .NET6+ / .NET Framework 4.6.2+
包管理: NuGet
渲染: SkiaSharp
输出:
文档: PDF
矢量: SVG
位图: PNG / JPEG / WEBP
合规:
归档: PDF/A-2、PDF/A-3
无障碍: PDF/UA-1
电子发票: ZUGFeRD、Factur-X
部署:
系统: Windows / Linux / macOS
容器: Docker / Kubernetes
快速开始
1、框架版本: 要求.NET6以上或.NET Framework 4.6.2以上。
dotnet --list-sdks
2、创建项目: 控制台、Web API、Worker都可以。
dotnet new webapi -n InvoiceService
cd InvoiceService
3、安装包:
dotnet add package QuestPDF
4、设置许可与全局配置: 启动时声明许可类型,需要的话同时指定默认字体与图片压缩质量。
QuestPDF.Settings.License = LicenseType.Community;
5、生成三种输出: 同一份文档定义,分别导出PDF、SVG与PNG,验证渲染是否符合预期。
document.GeneratePdf("output.pdf");
document.GenerateSvg();
document.GenerateImages();
更新进度
1000+优质开源项目更新进度:612/1000。如需更多类型优质项目推荐,请在文章后留言。
开源地址
https://www.questpdf.com/
阅读原文:点击这里
该文章在 2026/11/10 12:18:14 编辑过