Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取PDF文件以获取结构化格式的表格数据,_C#_Pdf_Itextsharp_File Read - Fatal编程技术网

C# 读取PDF文件以获取结构化格式的表格数据,

C# 读取PDF文件以获取结构化格式的表格数据,,c#,pdf,itextsharp,file-read,C#,Pdf,Itextsharp,File Read,我必须阅读一个pdf文件,其中包含一个有几列的表格。使用iTextSharp,我可以读取文件,但我会得到一堆未格式化的文本。我无法构造数据以便插入数据库 有什么建议吗?如果我理解正确,pdf文本是按位置存储的,因此它没有行或列的概念。这意味着您必须使用基于“可能性”的启发式方法,即您从不同的专栏中阅读的内容 您可以通过比较单词之间的空格来尝试这样做。(我不熟悉ITextSharp界面,因此如果我提到它无法实现的功能,请原谅我……我对pdfNet非常熟悉 我刚刚想到的另一个想法是,如果文本有视觉提

我必须阅读一个pdf文件,其中包含一个有几列的表格。使用iTextSharp,我可以读取文件,但我会得到一堆未格式化的文本。我无法构造数据以便插入数据库


有什么建议吗?

如果我理解正确,pdf文本是按位置存储的,因此它没有行或列的概念。这意味着您必须使用基于“可能性”的启发式方法,即您从不同的专栏中阅读的内容

您可以通过比较单词之间的空格来尝试这样做。(我不熟悉ITextSharp界面,因此如果我提到它无法实现的功能,请原谅我……我对pdfNet非常熟悉

我刚刚想到的另一个想法是,如果文本有视觉提示,例如分隔列的垂直线。如果是这种情况,你应该能够想出启发式方法来确定文本是在列线的左侧还是右侧

然而,如果可能的话,最好的办法是以更友好的数据库格式获取数据。从长远来看,这可能会避免心痛


--Jason

除非它的结构化文本没有显示列的标记。像PdfBox这样的工具会进行“猜测”来尝试提取表


有一篇文章解释了为什么文本提取在

上如此困难。我的结论是没有直接的方法来做这件事。至少阅读表格格式的数据。我尝试了Mark提供的建议,但根据我的要求,这似乎是不可行的。

一般来说,从PDF文件中读取数据是困难的,而且容易出错。当你说“我可以读取文件”时,你的确切意思是什么?你使用PdfReader类吗?是的。我使用PdfReader读取文件。但它完全分散。由于数据在表中,我无法正确读取它。