LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

PdfPig:被低估的 .NET PDF 处理神器

admin
2026年4月14日 10:59 本文热度 71

开头

上周帮朋友处理一个需求:把上百份 PDF 合同里的关键信息提取出来,汇总到 Excel 里。

他问我:“这个用 Python 做方便吗?”

我说:“用 .NET 吧,有个库叫 PdfPig,几行代码就能提取文本。”

他愣了一下:“.NET 还能处理 PDF?”

能。而且比你想象的优雅得多。

今天给大家介绍这个我私藏了很久的开源项目——PdfPig


项目简介


PdfPig 是一个纯 C# 实现的 PDF 处理库,由 UglyToad 团队开发和维护。

你可能不知道这个团队,但你一定听说过 PDFBox——这是 Apache 基金会的明星项目,最初由 Java 编写。PdfPig 的诞生,正是团队在尝试将 PDFBox 移植到 .NET 过程中演化出来的产物。

换句话说,PdfPig 站在了 PDFBox 的肩膀上继承了大量成熟可靠的 PDF 处理逻辑,同时又充分利用了 C# 的语言特性和 .NET 生态的优势。

项目在 GitHub 上开源(github.com/UglyToad/PdfPig),社区活跃,是 .NET 生态里 PDF 处理领域的标杆项目。


核心功能一览

PdfPig 的功能可以用"全面"二字形容。让我挨个说:

1. 文本提取

这是 PdfPig 最核心的能力。你可以通过多种方式提取 PDF 中的文本:

using (PdfDocument document = PdfDocument.Open(@"合同.pdf"))
{
foreach (Page page in document.GetPages())
    {
// 方式一:直接获取全文本(不推荐,顺序可能混乱)
string text = page.Text;

// 方式二:按阅读顺序提取(推荐)
string orderedText = ContentOrderTextExtractor.GetText(page);

// 方式三:获取单词列表,精确控制
        IEnumerable<Word> words =
            page.GetWords(NearestNeighbourWordExtractor.Instance);
    }
}

注意 README 里特别强调了:不要直接使用 page.Text,因为 PDF 内部的内容流顺序不等于我们阅读的顺序。这是很多新手容易踩的坑。

2. PDF 创建

PdfPig 不仅能读,还能写:

PdfDocumentBuilder builder = new PdfDocumentBuilder();
PdfPageBuilder page = builder.AddPage(PageSize.A4);

// 注册字体(必须是 Standard 14 字体或 TrueType 字体)
PdfDocumentBuilder.AddedFont font = builder.AddStandard14Font(Standard14Font.Helvetica);

// 添加文本
page.AddText("Hello World!"12new PdfPoint(25700), font);

// 生成并保存
byte[] documentBytes = builder.Build();
File.WriteAllBytes(@"C:\git\newPdf.pdf", documentBytes);

几行代码就能生成一个规范的 A4 PDF,效果如图:


3. PDF 合并

合并多个 PDF 只需一行:

var resultFileBytes = PdfMerger.Merge(filePath1, filePath2);

4. 加密文档支持

遇到有密码的 PDF?PdfPig 也能搞定:

// 提供密码打开
using (PdfDocument document = PdfDocument.Open(@"加密文档.pdf",
new ParsingOptions { Password = "user-password" }))

// 或者批量尝试密码
using (PdfDocument document = PdfDocument.Open(@"加密文档.pdf",
new ParsingOptions { Passwords = new List<string> { "pwd1""pwd2" } }))

5. 表单提取

AcroForm 表单字段也能读取:

if (document.TryGetForm(out AcroForm form))
{
foreach (var field in form.Fields)
    {
        Console.WriteLine($"字段名:{field.Name},类型:{field.FieldType}");
    }
}

6. 其他能力

  • 书签(Outline)读取
  • 超链接提取
  • 图片提取
  • 字体解析(支持 Standard 14 和 TrueType)
  • 嵌入文件提取
  • 文档结构分析

适用场景

说了这么多,你可能在想:这玩意儿用在哪儿?

场景一:文档自动化处理

最典型的就是我开头提到的场景——从大量 PDF 中提取结构化数据。比如:

  • 从发票 PDF 中提取金额、日期、开票方信息
  • 从合同 PDF 中提取甲乙方、金额、期限
  • 从报告 PDF 中提取关键数据填入数据库

场景二:PDF 预处理器

在做 RAG(检索增强生成)或知识库项目时,通常需要对文档进行分块和向量化。PdfPig 可以精确控制文本提取的颗粒度,配合文档布局分析算法,实现更智能的分块策略。

场景三:PDF 生成服务

如果你的系统需要生成 PDF 报告、证书、订单等,PdfPig 的 PdfDocumentBuilder 提供了简洁的 API。虽然功能不如 iText 丰富,但胜在轻量和易用。

场景四:PDF 质量检测

提取 Letters(字母级别的原始数据)后,你可以分析字体、字间距、排版等,用于检测 PDF 的制作质量或验证文档的格式规范性。


为什么选择 PdfPig?

可能有人会问:iTextSharp、Aspose.PDF 这些商业库不是更强大吗?

确实,功能上 PdfPig 不一定是最全的。但它有几个独特的优势:

第一,纯开源,零商业授权费用

iTextSharp(现在的 iText 7)在商业使用时需要付费许可证。PdfPig 采用 Apache 2.0 协议,完全免费,这对于创业公司和小团队非常友好。

第二,API 设计简洁

iTextSharp 的文本提取通常需要创建 Reader → Extractor → 设置引擎 → 获取文本,步骤较多。而 PdfPig 的方式非常直接:

// PdfPig:简洁直接,一气呵成
using (PdfDocument document = PdfDocument.Open(path))
{
string text = ContentOrderTextExtractor.GetText(document.GetPage(1));
}

谁的意图更清晰,一目了然。

第三,.NET 生态无缝集成

PdfPig 天然支持 .NET Standard / .NET Core / .NET 5+,可以轻松集成到 ASP.NET Core、Web API、WinForms、WPF 等各种应用场景。

第四,文档布局分析能力

这是 PdfPig 的一大亮点。它提供了多种文档布局分析算法:

  • DocstrumBoundingBoxes
  • NearestNeighbourWordExtractor
  • UnsupervisedReadingOrderDetector

配合使用,可以实现高精度的文本提取和阅读顺序还原。这对于处理排版复杂的 PDF(多栏、表格混排)尤为重要。


如何上手?

安装非常简单,NuGet 一行命令:

Install-Package PdfPig

或者通过 dotnet CLI:

dotnet add package PdfPig

官方 Wiki 提供了丰富的示例和详细文档,涵盖了从入门到进阶的各个方面。

写在最后

做开源项目最难的不是写出第一版代码,而是持续维护和迭代。PdfPig 团队多年来一直保持着活跃的更新,响应 issue 及时,版本迭代稳定。这种认真做项目的态度,在开源圈里弥足珍贵。

如果你正在做与 PDF 相关的 .NET 项目,不妨给 PdfPig 一个机会。它可能不是功能最全的,但一定是上手最快、用起来最顺手的之一。

当你还在为 PDF 焦头烂额时,别人已经用几行代码搞定了。

有时候,换对工具,效率提升的可不止一点点。


阅读原文:原文链接


该文章在 2026/4/14 15:07:06 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-2  粤公网安备44030602007207号