.NET PDF 生成:IronPDF、iText 和 QuestPDF 的实用比较
Source: Dev.to
概览
说实话吧。没有人会在早晨醒来就兴奋地去写 PDF 生成代码。它通常是一个快速任务的开始:“为这些发票添加一个‘导出为 PDF’按钮。” 看似两小时的工作,往往会在表格行跨页或自定义字体在服务器上渲染成乱码时,演变成凌晨 2 点的调试会话。
我已经多次掉进这个坑,所以我没有直接抓取谷歌上第一个库,而是坐下来测试了 .NET 领域的三大玩家——iText 7、QuestPDF 和 IronPDF,看看哪一个最尊重我的时间。
哲学
| 库 | 方法 |
|---|---|
| iText 7 | 传统的画布模型。你需要手动计算坐标并绘制每个元素。提供细粒度的控制,但感觉像自己铺设房子的每一块砖。 |
| QuestPDF | 使用严格类型化的 C# DSL 的流畅 API。仍然是“编码”视觉布局,但语法比原始坐标更简洁。 |
| IronPDF | HTML 转 PDF。内嵌无头 Chrome 引擎,你可以使用已经熟悉的 HTML/CSS 来设计文档,让库来渲染。 |
将简单文件写入磁盘
iText 7
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using var writer = new PdfWriter("hello.pdf");
using var pdf = new PdfDocument(writer);
using var document = new Document(pdf);
document.Add(new Paragraph("Hello World"));
QuestPDF
Document.Create(container =>
{
container.Page(page =>
{
page.Content().Text("Hello World");
});
}).GeneratePdf("hello.pdf");
IronPDF
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf(@"
## Hello World
").SaveAs("hello.pdf");
维护与布局更改
更改徽标尺寸或替换字体在 iText 或 QuestPDF 中可能会变成噩梦,因为你必须追踪坐标计算、填充调整以及字体文件引用,然后重新编译整个应用。
使用 IronPDF 的工作流要简单得多:
- 打开 HTML 模板字符串。
- 调整
width或添加 Google Fonts 链接。 - 保存——无需任何 C# 更改。
因为 PDF 是由 HTML 生成的,你甚至可以直接在 Chrome 中设计布局,使用检查器调试 CSS,然后把最终的 HTML 复制到项目中。渲染结果与浏览器显示完全一致。
性能基准
我在一台笔记本电脑(i7,16 GB RAM)上生成了 100 份发票,并测量了两个维度:运行时速度 和 开发工作量。
| 指标 | iText 7 | QuestPDF | IronPDF |
|---|---|---|---|
| 运行时间(100 文件) | ~1.2 s | ~2.5 s | ~8.5 s |
| 编码时间(初始) | ~4 h | ~2.5 h | ~15 min |
| 维护工作量 | 高 | 中 | 低 |
IronPDF 在运行时较慢,因为它必须启动一个无头浏览器,这比直接写入原始 PDF 字节消耗更多的 CPU 和内存。不过,除非你需要每秒生成成千上万的文档,否则这种差异(几十毫秒)对终端用户来说几乎不可感知。真正的优势在于开发和维护时间的大幅度缩减。
实际案例:电商收据
需求:用于退货的动态二维码,斑马纹表格行。
iText/QuestPDF 方法
- 找一个单独的二维码库,生成位图并嵌入。
- 编写循环
i % 2 == 0来设置行颜色。
IronPDF(HTML)方法
<img src="https://api.qrserver.com/v1/create-qr-code/?data=order123" alt="QR Code">
<table>
<tr>
<td>Item</td><td>Price</td>
</tr>
<tr>
<td>Product A</td><td>$10</td>
</tr>
<tr>
<td>Product B</td><td>$20</td>
</tr>
</table>
<style>
tr:nth-child(even) { background-color: #eee; }
</style>
HTML 方案非常简洁,且不需要额外的 C# 代码。
选择合适的工具
| 场景 | 推荐库 |
|---|---|
| 需要原始速度或 PDF 操作(如合并、盖章) | iText 7 |
| 偏好严格类型化的 C# DSL 且不想使用 HTML | QuestPDF |
| 想要快速开发、轻松调整布局,并且熟悉 HTML/CSS | IronPDF |
结论
这三种库都能生成 PDF,但在哲学、开发者体验和运行时性能上差异巨大。IronPDF 用适度增加的 CPU 使用换取了巨大的编码和维护工作量降低——在大多数业务应用中,这是一笔值得的交换。如果你想在午餐前完成任务,并且再也不想为布局计算烦恼,使用 IronPDF 的 HTML‑to‑PDF 是最佳选择。