在C#项目中生成PDF文件时,QuestPDF和iTextSharp是两款常用的第三方库,二者适用场景不同,开发者可以根据项目需求选择对应的方案。

QuestPDF生成PDF实现
环境准备
首先在NuGet包管理器中搜索安装QuestPDF包,目前最新稳定版本可以直接安装,无需额外配置依赖。
基础示例:生成简单PDF
QuestPDF采用fluent风格的API,通过组合不同的容器和元素来构建PDF内容,下面是一个生成包含标题和段落的PDF的示例:
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
// 设置QuestPDF许可证,社区版使用免费许可证
QuestPDF.Settings.License = LicenseType.Community;
public void GeneratePdfWithQuestPDF()
{
// 定义PDF文档结构
Document.Create(container =>
{
container.Page(page =>
{
// 设置页面大小和边距
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
// 设置页面内容
page.Content().Column(column =>
{
// 添加标题
column.Item().Text("QuestPDF生成的PDF示例")
.FontSize(24)
.Bold()
.AlignCenter();
// 添加空行
column.Item().Height(20);
// 添加正文段落
column.Item().Text("这是使用QuestPDF库生成的PDF文件内容,QuestPDF的API设计简洁,适合快速生成各类PDF文档。")
.FontSize(12)
.LineHeight(1.5f);
// 添加列表
column.Item().Height(10);
column.Item().Text("功能特点:").FontSize(14).Bold();
column.Item().Text(text =>
{
text.Span("1. 轻量级,无复杂依赖").FontSize(12);
text.Span("n2. 支持链式调用,代码可读性强").FontSize(12);
text.Span("n3. 支持文本、图片、表格等多种元素").FontSize(12);
});
});
});
})
// 保存PDF到指定路径
.GeneratePdf("QuestPDF_Example.pdf");
}
添加表格示例
QuestPDF也支持快速生成表格元素,下面是生成简单表格的代码:
public void GeneratePdfWithTable()
{
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Table(table =>
{
// 定义表格列
table.ColumnsDefinition(columns =>
{
columns.RelativeColumn(1);
columns.RelativeColumn(2);
columns.RelativeColumn(1);
});
// 表头行
table.Header(header =>
{
header.Cell().Text("编号").Bold();
header.Cell().Text("名称").Bold();
header.Cell().Text("数量").Bold();
});
// 数据行
for (int i = 1; i <= 3; i++)
{
table.Cell().Text(i.ToString());
table.Cell().Text($"测试商品{i}");
table.Cell().Text((i * 10).ToString());
}
});
});
}).GeneratePdf("QuestPDF_Table_Example.pdf");
}
iTextSharp生成PDF实现
环境准备
iTextSharp的NuGet包名称为iText7,安装时需要同时安装iText7.bouncy-castle-adapter依赖,用于支持加密等相关功能。
基础示例:生成简单PDF
iTextSharp采用文档对象模型,需要先创建文档实例,再添加各类内容元素,下面是基础示例:
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Font;
using iText.Kernel.Font;
public void GeneratePdfWithiTextSharp()
{
// 创建PDF写入器,指定输出路径
PdfWriter writer = new PdfWriter("iTextSharp_Example.pdf");
// 创建PDF文档实例
PdfDocument pdf = new PdfDocument(writer);
// 创建文档布局对象
Document document = new Document(pdf);
// 设置中文字体,避免中文乱码
PdfFont font = PdfFontFactory.CreateFont("C:/Windows/Fonts/simhei.ttf", PdfEncodings.IDENTITY_H);
// 添加标题
Paragraph title = new Paragraph("iTextSharp生成的PDF示例")
.SetFontSize(24)
.SetBold()
.SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER)
.SetFont(font);
document.Add(title);
// 添加空行
document.Add(new Paragraph("n").SetFont(font));
// 添加正文
Paragraph content = new Paragraph("这是使用iTextSharp库生成的PDF文件内容,iTextSharp功能全面,支持更多高级PDF操作。")
.SetFontSize(12)
.SetFont(font)
.SetLineHeight(1.5f);
document.Add(content);
// 关闭文档,释放资源
document.Close();
}
添加表格示例
iTextSharp的表格功能支持合并单元格、设置样式等高级操作,下面是生成表格的示例:
public void GeneratePdfWithiTextTable()
{
PdfWriter writer = new PdfWriter("iTextSharp_Table_Example.pdf");
PdfDocument pdf = new PdfDocument(writer);
Document document = new Document(pdf);
PdfFont font = PdfFontFactory.CreateFont("C:/Windows/Fonts/simhei.ttf", PdfEncodings.IDENTITY_H);
// 创建表格,指定列数
Table table = new Table(3);
// 设置表格宽度占满页面
table.SetWidth(iText.Layout.Properties.UnitValue.CreatePercentValue(100));
// 添加表头
table.AddHeaderCell(new Cell().Add(new Paragraph("编号").SetFont(font).SetBold()));
table.AddHeaderCell(new Cell().Add(new Paragraph("名称").SetFont(font).SetBold()));
table.AddHeaderCell(new Cell().Add(new Paragraph("数量").SetFont(font).SetBold()));
// 添加数据行
for (int i = 1; i <= 3; i++)
{
table.AddCell(new Cell().Add(new Paragraph(i.ToString()).SetFont(font)));
table.AddCell(new Cell().Add(new Paragraph($"测试商品{i}").SetFont(font)));
table.AddCell(new Cell().Add(new Paragraph((i * 10).ToString()).SetFont(font)));
}
document.Add(table);
document.Close();
}
两个库的选择建议
如果项目只需要生成简单的PDF,没有复杂操作需求,优先选择QuestPDF,它的代码更简洁,学习成本低,生成速度快。如果项目需要修改现有PDF、填充PDF表单、添加数字签名、处理复杂的PDF结构,那么选择iTextSharp更合适,它的功能覆盖更全面,生态更成熟。
需要注意的是,iTextSharp的商业使用需要购买许可证,个人学习或开源项目可以使用社区版本,QuestPDF的社区版则可以免费用于商业场景,开发者可以根据项目的许可证要求做最终选择。
C#QuestPDFiTextSharp生成PDF修改时间:2026-06-27 07:18:38