如何从标记的pdf中读取值?

时间:2017-02-17 10:10:26

标签: c# pdf syncfusion

我的PDF包含一个人员列表,我正在寻找一个理想的解决方案来获取这些人,但在某些情况下,我最后读了这句话:

  

这是不可能的,因为PDF没有结构。

现在有一些标记的PDF可以显示PDF的“结构”。就我而言,我有一个标记的PDF,其中每个人的每个值都有自己的行,每个人都在一列中。这意味着有/应该有一种简单的方法来解析我的PDF中的这个“表”,以获得每个人的价值,对吗?

所以我的问题是:当标记的PDF有结构时,我怎样才能从中受益所以我可以读取我需要的所有值?

(侧面小问题:使用PDF中的标签创建Excel文件的PDF到Excel应用程序?)

编辑#1:

这是PDF文件的示例: enter image description here

我已经尝试过使用SyncFusion建议的@Lara方法,但问题是我收到的字符串:

John Peter Smith Smithstrasse 1 0101 Smithikon am See 010 010 01 01 020 020 02 02

使用这样的输出不可能使用正则表达式。问题是你永远不知道在这种情况下Peter是属于名字还是姓,Smith可能是街道的一部分。这就是为什么我不能使用它,这就是为什么我在寻找可以在PDF中使用标签的解决方案的原因。一切都很好分开,所以我只需要一种从标签中获取值的方法。 enter image description here

编辑#2: 正如@Balasubramanian所希望的那样是一个标记的PDF示例: http://www.sh.ch/fileadmin/Redaktoren/Dokumente/Aufsichtsbehoerde_ueber_das_Anwaltswesen/Verzeichnis_SH_Anwaelte.pdf

本PDF为syncfusion提供了我在Edit#1中添加的输出。

我对输出没有任何特殊要求,因此如果我收到JSON文件,数组或类似内容中的数据并不重要。另一方面,重要的是每个人的每个价值是分开的,所以我可以得到这个价值。但最重要的问题是如何做到这一点。标签必须保存在PDF文件中(元数据?)。

2 个答案:

答案 0 :(得分:0)

ITextSharp是一个开源的.net库,您可以使用它来读取PDF文件的内容。下面的代码也是如此。

public static string GetTextFromAllPages(String pdfPath)
{
    PdfReader reader = new PdfReader(pdfPath); 

    StringWriter output = new StringWriter();  

    for (int i = 1; i <= reader.NumberOfPages; i++) 
        output.WriteLine(PdfTextExtractor.GetTextFromPage(reader, i, new SimpleTextExtractionStrategy()));

    return output.ToString();
}

您也可以从https://sourceforge.net/projects/itextsharp/或Nuget获取图书馆。只需在您的应用程序中下载并参考,然后使用上面的代码段。您将能够将PDF提取到文本中。

更新

以下是我建议您尝试的内容..

 string pDFExtract = "John Peter Smith Smithstrasse 1 0101 Smithikon am See 010 010 01 01 020 020 02 02";

 string[] arrpDFExtract = pDFExtract.Split(' ');

 string Name = arrpDFExtract[0] +" "+ arrpDFExtract[1];

在这里,您必须找出字符串数组的大小,并根据您必须构建条件,您将获得所需的确切值...分析数组长度的条件及其对应的你必须要做的价值。只需使用上述方法并从PDF中获取内容。

我使用这种算法构建进行了大量的文档处理,并且每件事都像魅力一样。

答案 1 :(得分:0)

目前 Syncfusion 不支持从标记PDF文档中提取文本。但是,您能否从标记的PDF文档以及您尝试从中提取文本的PDF文档中提供预期的输出结构