在 C# (.NET) 中生成 PDF 报告:iTextSharp、QuestPDF、PDFsharp

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

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

开始课程

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



创建 PDF 报告是 C# (.NET) 企业应用程序中最常见的任务之一。无论是为客户导出数据、生成发票还是复杂的分析仪表板,您都需要一个可靠的工具。在本文中,我们将介绍三个主要的库:iTextSharp(及其继承者 iText 7)、QuestPDF 和 PDFsharp。您将了解如何根据具体任务选择它们,并看到可运行的代码示例。



1. iTextSharp / iText 7 — 经典与强大



iTextSharp 是流行的 Java 库 iText 在 .NET 上的移植版本。iText 7 版本(NuGet 包 itext7)已完全重写,并支持现代 API。该库允许从头创建 PDF、编辑现有 PDF、添加水印、表单、书签和元数据。



主要功能:

  • 完全控制文档结构(段落、表格、图像、列表)。
  • 支持字体,包括西里尔字母(TrueType)。
  • 处理表单(AcroForms)和数字签名。
  • 许可证:AGPL(商业使用需要购买许可证)。


示例:创建带表格的简单报告

using iText.Kernel.Pdf;using iText.Layout;using iText.Layout.Element;

public void CreateReport(string filePath){ using (var writer = new PdfWriter(filePath)) using (var pdf = new PdfDocument(writer)) using (var document = new Document(pdf)) { document.Add(new Paragraph("销售报告") .SetFontSize(20).SetBold());

Table table = new Table(3); table.AddCell("商品"); table.AddCell("数量"); table.AddCell("价格");

table.AddCell("笔记本电脑"); table.AddCell("10"); table.AddCell("75000");

table.AddCell("鼠标"); table.AddCell("50"); table.AddCell("1500");

document.Add(table); }}


2. QuestPDF — 现代且简洁的 API



QuestPDF 是一个相对较新的库(自 2021 年起),正在迅速流行起来。其主要特点是 Fluent API,类似于使用 HTML/CSS 的工作方式。代码变得可读且紧凑。QuestPDF 完全免费用于商业用途(MIT 许可证)。



特点:

  • 声明式布局描述:容器、列、行。
  • 内置支持样式、颜色、边框和背景。
  • 自动文本换行和表格调整。
  • 导出为 PDF 和 XPS。


示例:使用 QuestPDF 创建报告

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

public void CreateInvoice(string filePath){ Document.Create(container => { container.Page(page => { page.Size(PageSizes.A4); page.Margin(2, Unit.Centimetre); page.DefaultTextStyle(x => x.FontSize(12));

page.Header().Text("发票号 #123") .SemiBold().FontSize(24).FontColor(Colors.Blue.Darken2);

page.Content().Table(table => { table.ColumnsDefinition(columns => { columns.ConstantColumn(100); columns.RelativeColumn(); columns.ConstantColumn(80); });

table.Header(header => { header.Cell().Text("名称"); header.Cell().Text("描述"); header.Cell().Text("金额"); });

table.Cell().Text("咨询"); table.Cell().Text("架构开发"); table.Cell().Text

推荐