我的PDF包含一个人员列表,我正在寻找一个理想的解决方案来获取这些人,但在某些情况下,我最后读了这句话:
这是不可能的,因为PDF没有结构。
现在有一些标记的PDF可以显示PDF的“结构”。就我而言,我有一个标记的PDF,其中每个人的每个值都有自己的行,每个人都在一列中。这意味着有/应该有一种简单的方法来解析我的PDF中的这个“表”,以获得每个人的价值,对吗?
所以我的问题是:当标记的PDF有结构时,我怎样才能从中受益所以我可以读取我需要的所有值?
(侧面小问题:使用PDF中的标签创建Excel文件的PDF到Excel应用程序?)
编辑#1:
我已经尝试过使用SyncFusion建议的@Lara方法,但问题是我收到的字符串:
John Peter Smith Smithstrasse 1 0101 Smithikon am See 010 010 01 01 020 020 02 02
使用这样的输出不可能使用正则表达式。问题是你永远不知道在这种情况下Peter
是属于名字还是姓,Smith
可能是街道的一部分。这就是为什么我不能使用它,这就是为什么我在寻找可以在PDF中使用标签的解决方案的原因。一切都很好分开,所以我只需要一种从标签中获取值的方法。
编辑#2: 正如@Balasubramanian所希望的那样是一个标记的PDF示例: http://www.sh.ch/fileadmin/Redaktoren/Dokumente/Aufsichtsbehoerde_ueber_das_Anwaltswesen/Verzeichnis_SH_Anwaelte.pdf
本PDF为syncfusion提供了我在Edit#1中添加的输出。
我对输出没有任何特殊要求,因此如果我收到JSON文件,数组或类似内容中的数据并不重要。另一方面,重要的是每个人的每个价值是分开的,所以我可以得到这个价值。但最重要的问题是如何做到这一点。标签必须保存在PDF文件中(元数据?)。
答案 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文档中提供预期的输出结构。