如何解析pdf文件中的表格?

时间:2017-01-25 14:08:23

标签: c# pdf syncfusion

我有一个自定义表格,其名称,名字,出生地和生活地点都在PDF文件中,我想用C#解析。最简单的方法之一是:

using (PdfLoadedDocument document = new PdfLoadedDocument("foobar"))
{
    for (var i = 0; i < document.Pages.Count; i++)
    {
        Console.WriteLine($"============ PAGE NO. {i+1} ============");
        Console.WriteLine(document.Pages[i].ExtractText());
    }
}

但问题是输出:

============ PAGE NO. 38 ============
John L.SmithSan Francisco5400 Baden

我无法用正则表达式分隔这个,所以我需要一种方法来解析每一行的每一列,以便将客户的所有值分开。如何通过syncfusion解析pdf文件中的表?

2 个答案:

答案 0 :(得分:1)

您需要一种方法来返回pdf中找到的每个字符的坐标。然后你有一些数学要做(基本上是计算字符之间的距离),以便知道字符是否是单词的一部分以及单词本身沿着x-ax所在的位置。它需要大量的工作和努力,我在syncfusion文档中找不到这样的方法。

我写了一个做你想做的事情的课,但是这是针对java项目的: PDFLayoutTextStripper (upon PDFBox)

答案 1 :(得分:0)

Syncfusion控件基于PDF文档中存在的内容结构从PDF文档中提取文本。因此,基于Syncfusion控件的当前实现,我们无法识别PDF文档表中存在的行和列。

此外,由于PDF文档中的内容遵循固定布局,因此无法以与使用Syncfusion控件显示的PDF文档相同的正确顺序提取文本。

但我们可以使用Tabula(开源库)在Excel中填充PDF文档的表格。我已经修改了Tabula java(开源),以根据您的要求从PDF文档中实现基于布局的文本提取。

请在以下链接中找到此实施的示例:

http://www.syncfusion.com/downloads/support/directtrac/171585/ze/TextExtractionSample649531336

在执行样本之前,请确保以下事项:

  1. 从以下链接安装Java Runtime Environment(JRE)        http://www.oracle.com/technetwork/java/javase/downloads/
  2. 重新启动计算机。
  3. 执行以上示例。
  4. 试试这个并检查它是否符合您的要求。