C# (.NET) 中的 PDF 生成:库的完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# (.NET) 中的 PDF 生成:最佳库概览



生成 PDF 文档是 C# 企业级和 Web 应用程序中的常见任务之一。报告、发票、运单、证书——所有这些都可以方便地以 PDF 格式生成。在 .NET 生态系统中,有多个强大的库,既有付费的,也有免费的。在本文中,我们将分析最流行的工具、它们的功能,并提供代码示例。



.NET 中用于处理 PDF 的流行库



  • iTextSharp / iText 7 — 最古老且功能最丰富的库之一。商业使用需要付费版本 (iText 7),但存在基于 LGPL 协议的旧版 iTextSharp。
  • PdfSharp / MigraDoc — 免费的开源库。非常适合简单的文档和报告。
  • QuestPDF — 具有流畅 API 的现代库。商业使用免费 (MIT 许可证)。允许用最少的代码创建复杂的文档。
  • IronPDF — 付费库,但功能非常强大:HTML 转 PDF、处理表单、密码保护。
  • SelectPdf — 另一个付费工具,支持 HTML 转 PDF 并具有大量设置选项。


通过 NuGet 安装库



所有库都通过 NuGet 包管理器以标准方式安装。安装示例:



// 对于 PdfSharpInstall-Package PdfSharp

// 对于 QuestPDFInstall-Package QuestPDF

// 对于 iTextSharp (旧版)Install-Package iTextSharp.LGPLv2.Core


示例 1:使用 PdfSharp 创建 PDF



PdfSharp 是简单任务的绝佳选择。以下是创建包含文本和表格的文档的示例:



using PdfSharp.Pdf;using PdfSharp.Drawing;

class Program{ static void Main() { // 创建一个新的 PDF 文档 PdfDocument document = new PdfDocument(); PdfPage page = document.AddPage(); XGraphics gfx = XGraphics.FromPdfPage(page);

// 绘制文本 XFont font = new XFont("Arial", 14); gfx.DrawString("你好,PDF 世界!", font, XBrushes.Black, new XRect(10, 10, page.Width, page.Height), XStringFormats.TopLeft);

// 保存文档 document.Save("HelloWorld.pdf"); Console.WriteLine("PDF 已创建!"); }}


示例 2:使用 QuestPDF 生成报告



QuestPDF 提供了优雅的 Fluent API。让我们创建一个简单的发票:



using QuestPDF.Fluent;using QuestPDF.Helpers;using QuestPDF.Infrastructure;

class Program{ static void Main() { Document.Create(container => { container.Page(page => { page.Size(PageSizes.A4); page.Margin(2, Unit.Centimetre); page.DefaultTextStyle(x => x.FontSize(12));

page.Header().Element(ComposeHeader); page.Content().Element(ComposeContent); page.Footer().AlignCenter().Text("第 {0} 页,共 {1} 页", x => x.CurrentPageNumber(), x => x.TotalPages()); }); }).GeneratePdf("Invoice.pdf");

Console.WriteLine("发票已创建!"); }

static void ComposeHeader(IContainer container) { container.Row(row => { row.RelativeItem().Column(column => { column.Item().Text("发票").Bold().FontSize(20); column.Item().Text($"日期: {DateTime.Now:dd.MM.yyyy}"); }); row.ConstantItem(100).Image(Placeholders.Image(100, 100)); }); }

static void ComposeContent(IContainer container) { container.Table(table => { // 表格标题 table.ColumnsDefinition(columns =>

推荐