C# (.NET) 中的 PDF 生成:库与工具完整概览
创建 PDF 文档是企业开发中最常见的任务之一。报告、发票、运单、合同——所有这些都需要可靠的生成工具。在 C# (.NET) 生态系统中,存在几个功能强大的库,每个都有其自身特点。在本文中,我们将分析最流行的选项、它们的优缺点,并提供代码示例。
1. iTextSharp / iText 7 for .NET
iText 是 PDF 生成领域事实上的标准。该库自 2000 年就已存在,并且正在积极开发中。对于 .NET,可以使用 iText 7 版本(NuGet 包 itext7)。
功能:
- 完全控制内容:文本、表格、图像、注释。
- 处理表单 (AcroForms)、数字签名和加密。
- 支持 PDF/A(归档存储)。
- 高性能。
缺点:
- API 复杂(低级别的坐标操作)。
- 商业使用需要付费许可证(开源使用 AGPL)。
创建简单 PDF 的示例:
using iText.Kernel.Pdf;using iText.Layout;using iText.Layout.Element;
public void CreatePdf(string filePath){ using (var writer = new PdfWriter(filePath)) using (var pdf = new PdfDocument(writer)) using (var document = new Document(pdf)) { document.Add(new Paragraph("你好,世界!")); document.Add(new Paragraph("这是使用 iText 7 创建的 PDF。")); }}2. PDFsharp
PDFsharp 是一个轻量级的开源 .NET 库(也有 GDI+ 版本)。非常适合简单的任务:创建包含文本、表格和图像的文档。
功能:
- 简单直观的 API。
- 支持字体(包括西里尔字母)。
- 处理图形基元(线条、形状)。
- 免费(MIT 许可证)。
缺点:
- 对复杂元素(表单、书签)的支持有限。
- 处理大量数据时比 iText 慢。
示例:
using PdfSharp.Pdf;using PdfSharp.Drawing;
public void CreatePdf(string filePath){ using (var document = new PdfDocument()) { var page = document.AddPage(); using (var gfx = XGraphics.FromPdfPage(page)) { var font = new XFont("Arial", 20, XFontStyle.Regular); gfx.DrawString("你好,世界!", font, XBrushes.Black, new XPoint(40, 100)); } document.Save(filePath); }}3. QuestPDF
QuestPDF 是一个现代化的库,具有流畅的 API,灵感来自“布局优先”的概念。它允许以声明方式描述文档结构,极大地简化了复杂布局的创建。
功能:
- 声明式风格(如 WPF 或 HTML)。
- 自动分页。
- 支持表格、标题、页眉和页脚。
- 免费版本有限制(最多 10 页)。
缺点:
- 免费版本受限。
- 灵活性不如 iText(难以绘制任意图形)。
示例:
using QuestPDF.Fluent;using QuestPDF.Helpers;using QuestPDF.Infrastructure;
public void CreatePdf(string filePath){ Document.Create(container => { container.Page(page => { page.Size(PageSizes.A4); page.Margin(30); page.Content().Column(col => { col.Item().Text("你好,世界!").FontSize(20); col.Item().Text("这是 QuestPDF。").FontSize(14); }); });