在 C# 中创建 PDF 是开发人员生成动态文档、报告或发票的关键技能。这一功能在各种应用中尤为重要,从商业软件到网络服务。像 Spire.PDF for .NET 这样的库通过提供丰富的文本、表格和 HTML 内容渲染功能,简化了生成高质量PDF的过程。
本指南全面介绍了使用 Spire.PDF 在 C# 中生成 PDF的方法,涵盖从创建基本文本文档到高级功能(如 HTML 转换和 基于模板的生成 )的所有内容。通过本指南,您将掌握创建和定制 PDF 以满足特定需求的知识和工具。
- 了解 Spire.PDF - C# PDF 生成库
- 理解坐标系
- 创建包含文本的基本 PDF
- 通过添加内容增强 PDF
- C# 将 HTML 内容渲染为 PDF
- C# 基于模板生成 PDF
- 结论
- 常见问题解答
了解 Spire.PDF - C# PDF生成库
Spire.PDF for .NET是一个功能强大且多用途的 .NET 库,专为编程创建、编辑和操作 PDF 文档而设计。它为开发人员提供了一套全面的功能,可以从头生成高质量的 PDF、修改现有文件并将各种格式转换为 PDF。
Spire.PDF 的主要功能有:
- PDF 创建与编辑 : 构建包含文本、图片、表格、列表等的 PDF。
- 丰富的格式化选项 : 自定义字体、颜色、对齐方式和布局。
- HTML 转 PDF : 将网页或 HTML 内容以精确的格式渲染为 PDF。
- 基于模板的 PDF 生成 : 在现有 PDF 中使用占位符动态插入文本和数据。
- 交互元素 : 支持表单、注释和书签。
- 文档安全性 : 应用密码、权限和数字签名。
要开始使用 Spire.PDF 库,可以直接通过 NuGet 安装。
Install-Package Spire.PDF
或者,您可以从我们的官方网站下载 Spire.PDF,并手动将 DLL 导入到项目中。
理解坐标系
Spire.PDF 使用的坐标系与许多图形库类似,但有一些 PDF 特有的注意事项。原点(0, 0) 位于内容区域的 左上角 (不包括边距),Y 轴正方向向下。在构建文档布局时,此系统对于精确放置元素至关重要。
创建包含文本的基本 PDF
现在我们的环境已经设置好了,让我们开始创建第一个 PDF 文档。文本内容是大多数 PDF 文档的核心,了解如何有效地处理文本至关重要。本节将通过一个完整的示例演示核心文本处理功能,同时介绍重要的类和概念。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace CreatePdfDocument
{
class Program
{
static void Main(string[] args)
{
// 创建PdfDocument对象
PdfDocument doc = new PdfDocument();
// 添加页面
PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, new PdfMargins(50f));
// 创建笔刷和字体对象
PdfSolidBrush titleBrush = new PdfSolidBrush(new PdfRGBColor(Color.Blue));
PdfSolidBrush paraBrush = new PdfSolidBrush(new PdfRGBColor(Color.Black));
PdfTrueTypeFont titleFont = new PdfTrueTypeFont(new Font("宋体", 18f, FontStyle.Bold), true);
PdfTrueTypeFont paraFont = new PdfTrueTypeFont(new Font("宋体", 13f, FontStyle.Regular), true);
// 指定标题文本
String titleText = "什么是Spire.PDF";
// 通过PdfStringFormat类设置文本对齐方式
PdfStringFormat format = new PdfStringFormat();
format.Alignment = PdfTextAlignment.Center;
// 在页面中央绘制标题
page.Canvas.DrawString(titleText, titleFont, titleBrush, page.Canvas.ClientSize.Width / 2, 20, format);
// 从.txt文件获取段落内容
string paraText = "Spire.PDF是一个.NET库,专为创建、读取和操作PDF文档而设计。" +
"它提供了广泛的功能,包括从头生成PDF文档以及将各种格式转换为PDF。" +
"用户可以通过添加文本、图片或注释来修改现有的PDF文件,还支持填写和管理交互式PDF表单。" +
"此外,Spire.PDF允许从PDF文档中提取文本和图片,并将PDF文件转换为其他格式," +
"如Word、Excel和图片。";
// 创建PdfTextWidget对象以保存段落内容
PdfTextWidget widget = new PdfTextWidget(paraText, paraFont, paraBrush);
// 创建矩形区域以放置段落内容
RectangleF rect = new RectangleF(0, 50, page.Canvas.ClientSize.Width, page.Canvas.ClientSize.Height);
// 将PdfLayoutType设置为Paginate以使内容自动分页
PdfTextLayout layout = new PdfTextLayout();
layout.Layout = PdfLayoutType.Paginate;
// 在页面上绘制widget
widget.Draw(page, rect, layout);
// 将文档保存到文件
doc.SaveToFile("SimpleDocument.pdf");
doc.Dispose();
}
}
}
此示例中的关键要素:
- PdfDocument :表示 PDF 文档的根类
- PdfPageBase :提供页面内容的画布
- PdfTextWidget :处理带有自动分页的复杂文本布局
- PdfStringFormat :控制文本对齐和定位
此示例展示了创建更复杂文档的基本技术。我们首先建立文档结构,然后添加具有精确定位的样式化内容,并管理可能跨多页的长文本。带有 PdfLayoutType.Paginate 的 PdfTextWidget 是关键,因为它自动处理跨页的文本流,这对于长度不一的动态内容至关重要。
效果图:
通过添加内容增强 PDF
虽然文本构成了大多数文档的基础,但专业的 PDF 通常需要更丰富的内容类型来有效传达信息。本节探讨如何通过合并图片、表格和列表来提升文档质量。
1. 添加图片
图片在许多文档中起着至关重要的作用,无论是显示徽标、产品照片、图表还是其他视觉元素。Spire.PDF提供了简单的图像处理功能,以实现精确定位和缩放。
PdfImage类处理各种图像格式,而 DrawImage 使用我们之前讨论的坐标系定位和绘制图像。您还可以根据需要调整和变换图像。
// 加载图片
PdfImage image = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\ai.png");
// 指定绘制图片的X和Y坐标
float x = 0f;
float y = 0f;
// 在页面指定位置绘制图片
page.Canvas.DrawImage(image, x, y);
2. 创建表格
表格对于清晰地呈现结构化数据至关重要。Spire.PDF 与 .NET 的 DataTable无缝集成,简化了数据管理。PdfTable类通过其 Style属性提供样式选项,允许控制标题外观和单元格填充。您还可以通过边界矩形参数控制表格的位置和尺寸,以与其他文档元素完美对齐。
// 创建PdfTable
PdfTable table = new PdfTable();
// 创建DataTable
DataTable dataTable = new DataTable();
dataTable.Columns.Add("名字");
dataTable.Columns.Add("年龄");
dataTable.Columns.Add("部门");
dataTable.Rows.Add(new object[] { "David", "35", "开发" });
dataTable.Rows.Add(new object[] { "Sophie", "32", "技术支持" });
dataTable.Rows.Add(new object[] { "Wayne", "28", "市场营销" });
// 显示标题(默认不可见)
table.Style.ShowHeader = true;
// 设置标题行的字体颜色和背景颜色
table.Style.HeaderStyle.BackgroundBrush = PdfBrushes.Gray;
table.Style.HeaderStyle.TextBrush = PdfBrushes.White;
// 设置表头以及其他单元格的字体
table.Style.DefaultStyle.Font = new PdfTrueTypeFont(new Font("宋体", 13f, FontStyle.Regular), true);
table.Style.HeaderStyle.Font = new PdfTrueTypeFont(new Font("宋体", 13f, FontStyle.Bold), true);
// 分配数据源
table.DataSource = dataTable;
// 设置标题行的文本对齐方式
table.Style.HeaderStyle.StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
// 设置其他单元格的文本对齐方式
for (int i = 0; i < table.Columns.Count; i++)
{
table.Columns[i].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
}
// 在页面上绘制表格
table.Draw(page, new RectangleF(0, 150, 300, 150));
除了 PdfTable,Spire.PDF 还提供了 PdfGrid类,使在 PDF 文档中创建和管理复杂表格更加容易。具体实现示例可参考:使用 C# 生成 PDF 表格
3. 添加列表
列表是呈现顺序信息、分步说明或分层数据的基础。Spire.PDF 提供了专门的列表类,可以自动处理所有格式复杂性。
PdfSortedList类支持具有各种编号样式的有序列表。通过 Marker属性,您可以自定义列表项的外观,包括多级编号方案。
// 创建字体
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 13f), true);
// 为有序列表创建标记
PdfOrderedMarker marker = new PdfOrderedMarker(PdfNumberStyle.Numeric, font);
// 创建编号列表
String listContent = "数据结构\n"
+ "算法\n"
+ "计算机网络\n"
+ "操作系统\n"
+ "计算理论";
PdfSortedList list = new PdfSortedList(listContent);
// 设置列表的字体、缩进、文本缩进和笔刷
list.Font = font;
list.Indent = 2;
list.TextIndent = 4;
list.Marker = marker;
// 在页面指定位置绘制列表
list.Draw(page, 310, 140);
C# 将 HTML 内容渲染为 PDF
在现代应用中,无论是用于网页存档、报告生成还是创建网页内容的可打印版本,将 HTML 内容转换为 PDF 格式的需求越来越普遍。
Spire.PDF 通过其 HTML 转换功能满足了这一需求,该功能利用 Chrome 的渲染引擎实现出色的保真度。这种方法确保您的 PDF 输出与网页浏览器中的内容显示非常接近,包括对现代 CSS 功能的支持。
转换过程高度可配置,允许您控制 页面大小 、边距和超时设置,以适应各种内容类型和网络条件。
using Spire.Additions.Chrome;
namespace ConvertHtmlToPdf
{
internal class Program
{
static void Main(string[] args)
{
// 指定输入URL和输出PDF文件路径
string inputUrl = @"C:\Users\Administrator\Desktop\Html.html";
string outputFile = @"HtmlToPDF.pdf";
// 指定Chrome插件的路径
string chromeLocation = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
// 创建ChromeHtmlConverter类的实例
ChromeHtmlConverter converter = new ChromeHtmlConverter(chromeLocation);
// 创建ConvertOptions类的实例
ConvertOptions options = new ConvertOptions();
options.Timeout = 10 * 3000;
// 设置转换后PDF的纸张大小和页边距
options.PageSettings = new PageSettings()
{
PaperWidth = 8.27,
PaperHeight = 11.69,
MarginTop = 0,
MarginLeft = 0,
MarginRight = 0,
MarginBottom = 0
};
// 将URL转换为PDF
converter.ConvertToPdf(inputUrl, outputFile, options);
}
}
}
注 :该代码的运行环境需要安装Google Chrome浏览器,且代码运行时Chrome浏览器要在关闭状态。
效果图:
C# 基于模板生成 PDF
基于模板的 PDF 生成为生产和企业应用程序提供了可维护性和一致性方面的显著优势。Spire.PDF 通过其文本替换功能支持这一点,允许创建带有占位符的主模板,这些占位符在运行时填充数据。这种设计与内容的分离使非技术用户无需编码即可更新模板。
PdfTextReplacer类提供了管理替换的选项,包括自动调整文本大小以适应指定空间,非常适合合同、证书或表单等文档,其中布局是固定的,但细节各不相同。
using Spire.Pdf;
using Spire.Pdf.Texts;
namespace CreatePdfFromTemplate
{
class Program
{
static void Main(string[] args)
{
// 创建PdfDocument对象
PdfDocument doc = new PdfDocument();
// 加载PDF文件
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\template_cn.pdf");
// 创建PdfTextReplaceOptions对象并指定选项
PdfTextReplaceOptions textReplaceOptions = new PdfTextReplaceOptions
{
ReplaceType = PdfTextReplaceOptions.ReplaceActionType.AutofitWidth | PdfTextReplaceOptions.ReplaceActionType.WholeWord
};
// 获取特定页面
PdfPageBase page = doc.Pages[0];
// 基于页面创建PdfTextReplacer对象
PdfTextReplacer textReplacer = new PdfTextReplacer(page)
{
Options = textReplaceOptions
};
// 新旧字符串的字典
Dictionary replacements = new Dictionary
{
{ "#姓名#", "张三" },
{ "#性别#", "男" },
{ "#生日#", "1990年1月15日" },
{ "#地址#", "辽宁省大连市甘井子区56号" }
};
// 遍历字典以替换文本
foreach (var pair in replacements)
{
textReplacer.ReplaceText(pair.Key, pair.Value);
}
// 将文档保存到不同的PDF文件
doc.SaveToFile("Output.pdf");
doc.Dispose();
}
}
}
效果图 :
结论
使用 Spire.PDF 在 C# 中生成 PDF文档功能强大,能为您的应用程序带来显著价值。无论是简单的文本文件、复杂的模板内容替换,还是 HTML 内容渲染,Spire.PDF 都能提供全面的解决方案。其 API 设计直观易用,功能丰富完善,是开发者集成 PDF 功能的理想选择。
常见问题解答
Q1. C# 中创建 PDF 的最佳库是什么?
Spire.PDF 因其丰富的功能集、用户友好的接口以及对 HTML 转 PDF 等高级操作的支持而受到强烈推荐。它使开发人员能够轻松创建、操作和定制 PDF 文档以满足各种需求。
Q2. 我可以在不使用外部库的情况下在 C# 中创建 PDF 吗?
在 .NET 中,原生(内置)的 PDF 处理功能非常有限,对于添加表格或图片等复杂任务,像 Spire.PDF 这样的库是必不可少的。
Q3. 如何在 C# 中通过HTML生成 PDF ?
Spire.PDF 与 Chrome 的集成允许将 HTML 无缝转换为 PDF。您可以自定义页面设置(如边距和方向),确保输出PDF 保持原始 HTML 内容的所需格式和布局。
Q4. 如何用密码或权限保护我的PDF?
Spire.PDF 通过 PdfSecurityPolicy 类提供了强大的加密选项。您可以设置所有者密码和用户密码以限制访问,以及定义打印、复制和编辑PDF的权限。
Q5. 我可以使用Spire.PDF将 MS Word 和 Excel 转换为 PDF 吗?
不可以,您不能直接使用 Spire.PDF 转换 Word 或Excel文件。对于 Word 转 PDF,请使用 Spire.Doc;对于 Excel 转 PDF,请使用 Spire.XLS。
申请临时License
如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。