前言
.NET 体系下的PDF处理类库多种多样,如Aspose、QuestPDF、Spire和iTextSharp等,它们各有千秋且功能强大。
然而,这些库要么是商业产品价格高昂(可以理解收费模式),要么是开源版本附带各种限制条件。
例如,Spire的开源版本有诸多限制,而iTextSharp虽然没有使用限制,但其AGPL开源协议并不适合闭源商业软件。
推荐一款基于.NET 6的跨平台、免费开源(MIT协议)的PDF处理库——PDFSharp。该库不仅支持.NET Framework,还提供了一个活跃的社区论坛(PDFsharp & MigraDoc Forum)。
经过一段时间的试用,发现PDFSharp及其姊妹项目MigraDoc能够满足大多数PDF生成和编辑需求,并且其灵活性和功能性都相当出色。
本文将详细介绍如何利用PDFSharp库进行PDF文件的创建与编辑,分享在实际应用中的经验,并提供一些实用的例子供大家参考。
.NET 平台常见的PDF类库
Aspose:reference.aspose.com/
QuestPDF:www.questpdf.com/
Spire:www.e-iceblue.cn/Introduce/S…
iTextSharp:github.com/itext/itext…
PDFSharp 简介
PDFSharp 是一个基于.NET的开源库,专门用于处理PDF文档。
它支持从零开始创建PDF文件,也可以对现有PDF文件进行修改。
PDFSharp的特点在于其简洁的API设计和强大的布局引擎,使我们能够轻松地实现复杂的PDF文档生成任务。
另外,PDFSharp还有一个姊妹项目——MigraDoc Foundation,专注于文档对象模型的构建,并能将文档渲染为PDF或RTF格式。
主要功能
创建PDF:无需模板,直接从头开始构建PDF文档。
内容插入:支持文本、图像、表格和图形等元素的添加。
格式化:提供字体选择、颜色设定和布局调整等功能,实现高度定制化。
合并与拆分:可以合并多个PDF文件或拆分单个PDF文件。
加密与解密:设置安全选项,保护PDF内容不被非法访问。
优势特点
简单易用:简洁的API设计,便于快速上手和使用。
全面功能:涵盖创建、编辑、合并、拆分、转换和加密等多种操作,满足不同需求。
应用场景
PDFSharp 广泛应用于生成报告、创建电子书、生成发票和合同等。无论是个人用户还是企业用户,都能从中受益。
PDFsharp示例
下面将详细解释示例中的所有代码,分为两个部分:创建文档和渲染文档。
设置字体解析器
为了确保文档所需的所有字体都能被解析,在使用MigraDoc的核心开发时(请参阅选择PDFsharp开发)需要设置字体解析器:
// 核心构建不使用Windows字体,
// 因此需要设置一个处理样本所需字体的FontResolver。
GlobalFontSettings.FontResolver = new SamplesFontResolver();
对于自己的项目,应该创建一个支持所需字体的自定义字体解析器。
请注意,SamplesFontResolver从PDFsharp.Samples特定的资源文件夹加载字体,而需要以一种不需要依赖仓库的方式提供字体文件。
创建文档
示例执行其 CreateDocument函数,其中包含以下代码:
//创建一个新的MigraDoc文档。
var document = new Document();
//向文档添加一个节点。
var section = document.AddSection();
创建了一个MigraDoc文档和一个节点,因为文档的所有内容都组织在节点中。
接下来,继续添加以下代码:
// 节点中添加一个段落。
var paragraph = section.AddParagraph();
// 设置字体颜色。
paragraph.Format.Font.Color = Colors.DarkBlue;
// 向段落添加一些文本。
paragraph.AddFormattedText("Hello, World!", TextFormat.Bold);
向节点中添加了一个段落,并将整个段落的字体颜色设置为深蓝色。
然后,添加了带有"Hello, World!"内容并设置为粗体的格式化文本。
之后,创建并填充页脚:
// 创建主要页脚。
var footer = section.Footers.Primary;
// 向页脚添加内容。
paragraph = footer.AddParagraph();
paragraph.Add(new DateField { Format = "yyyy/MM/dd HH:mm:ss" });
paragraph.Format.Alignment = ParagraphAlignment.Center;
主要页脚添加了一个段落,并在其中添加了日期字段,同时将整个段落设置为中心对齐。
最后,向节点中添加图像:
// 添加MigraDoc标志。
string imagePath = IOUtility.GetAssetsPath(@"migradoc/images/MigraDoc-128x128.png")!;
document.LastSection.AddImage(imagePath);
GetAssetsPath调用仅获取图像路径,重要的是第二行,它将图像添加到节中。
在返回CreateDocument后,修改Normal样式:
var style = document.Styles[StyleNames.Normal]!;
style.Font.Name = "Arial";
Normal样式是所有其他段落样式的默认样式。因此,Arial字体将继承到文档中的所有对象,除非被覆盖。
渲染文档
当文档创建完成后,开始渲染。
首先,创建PdfDocumentRenderer实例:
// 创建一个用于MigraDoc文档的渲染器。
var pdfRenderer = new PdfDocumentRenderer
{
// 将MigraDoc文档与渲染器关联。
Document = document,
PdfDocument =
{
// 在渲染MigraDoc文档之前更改一些设置。
PageLayout = PdfPageLayout.SinglePage,
ViewerPreferences =
{
FitWindow = true
}
}
};
创建了PdfDocumentRenderer实例,将其与创建的文档关联,并设置一些PDF文件的属性。
然后渲染并保存文档:
// 布局并渲染文档为PDF。
pdfRenderer.RenderDocument();
// 保存文档...
var filename = PdfFileUtility.GetTempPdfFullFileName("samples-MigraDoc/HelloWorldMigraDoc");
pdfRenderer.PdfDocument.Save(filename);
// ...并在PDF查看器中打开。
PdfFileUtility.ShowDocument(filename);
RenderDocument 将 MigraDoc文档实例渲染为PDFsharp的PdfDocument实例。
Save方法将PDFsharp文档保存到指定文件中。
总结
以上仅展示了PDFSharp库的部分功能。更多实用特性和详细信息,请大家访问项目地址。
希望通过本文能为.NET PDF文档处理和开发方面提供有价值的参考。欢迎在评论区留言交流,分享您的宝贵经验和建议。
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!