65.9K
CodeProject 正在变化。 阅读更多。
Home

C# PDF 文档解析器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.95/5 (14投票s)

2018年12月26日

GPL3

2分钟阅读

viewsIcon

37816

用于构建 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 日:初始版本
© . All rights reserved.