C# PDF 文档解析器






4.95/5 (14投票s)
用于构建 PDF 解析器的 .NET 工具集
想法
PdfDocumentParser
的主要解析方法是基于在 PDF 页面上找到特定的文本或图像片段,然后提取相对于这些片段定位和大小的文本/图像。
在此范围内,PdfDocumentParser
能够执行以下操作:
- 搜索/提取由 PDF 实体表示的文本
- 搜索/提取通过 OCR 获取的文本
- 搜索/比较/提取页面片段作为图像
作为解析过程的一部分,PdfDocumentParser
允许检查 PDF 页面上的自定义条件,以决定对该页面执行哪些操作。
PdfDocumentParser
能够将图形化表格解析为数据数组。
有关更多详细信息,请参阅 文档。
模板编辑器
为了能够解析 PDF 文档,PdfDocumentParser
必须提供与文档布局相对应的解析模板。为此,PdfDocumentParser
提供了模板编辑器,该编辑器允许以易于使用的方式创建和调试解析模板。模板编辑器应由宿主应用程序调用。
Application
基于 PdfDocumentParser
的应用程序必须关注以下主要方面:
- 提供解析模板的存储和管理
- 允许用户使用模板编辑器创建和修改模板
- 实现自定义的 PDF 文件处理算法
- 选择应用于 PDF 页面的模板
- 处理所选模板解析的数据
这样的应用程序的一个例子是 PdfDocumentParser
解决方案中的 SampleParser
项目。
算法
逐页处理 PDF 文件的基本算法如下:
//Pseudo-code: processing a PDF file where every page requires choosing new template.
//Note: The classes and methods are not real and serve for simplicity and clarity only.
foreach(page in pdfFile)
{
//find the right template for the page
if(PdfDocumentParser.ActiveTemplate == null)
{
foreach(template in templates)
{
PdfDocumentParser.ActiveTemplate = template;
if(PdfDocumentParser.IsCondition(page, "RightTemplateForPage"))
break;
PdfDocumentParser.ActiveTemplate = null;
}
}
if(PdfDocumentParser.ActiveTemplate == null)
{
logWarning("No template matched to page: " + page.Number);
continue;
}
//applying the chosen template to the page
object value1 = PdfDocumentParser.GetValue(page, "field1");
//doing something with value1...
<...>
object value2 = PdfDocumentParser.GetValue(page, "field2");
//doing something with value2...
<...>
}
请注意,像 'RightTemplateForPage
' 这样的条件是由自定义应用程序引入和预先确定的。PdfDocumentParser
仅提供检查它们的功能。因此,解析逻辑可以根据需要复杂。
条件的确切检查方式取决于模板,因为每个模板都为其提供自己的定义。条件定义是关于在 PDF 页面上找到的内容和未找到的内容的布尔表达式。
例如,在处理发票时,'RightTemplateForPage
' 可能会检查公司名称或徽标是否位于 PDF 页面上,从而检测页面是否与模板对应。
创建 VS 解决方案
不要直接下载最新代码到分支,因为它可能正在开发中。相反,转到发布页面并下载最新的(预)发布源代码。在那里找到 SampleParser.sln,并在 Visual Studio 中打开它。这将提供一个完整的 PdfDocumentParser
使用示例,您可以根据自己的要求进行修改。
如果从头开始构建,而没有 SampleParser
的步骤:
- 创建您的项目。
- 将
PdfDocumentParser
项目添加到解决方案中。 - 在您的项目中引用
PdfDocumentParser
。 - 更新解决方案的 nuget 包。
- 开始使用
PdfDocumentParser
API 开发您的解析器。
尽情享用!
历史
- 2020 年 2 月 12 日:初始版本