2016-11-15 86 views
1

我试图从PDF文件中提取文本:http://www.filedropper.com/copy_1,但是我得到的文本不到一页的一半。 我使用iTextSharp的:PDF提取不完整

PdfReader reader = new PdfReader(file); 
string currentText = PdfTextExtractor.GetTextFromPage(reader, 1); 

我已经使用的,以及代替默认LocationTextExtractionStrategy SimpleTextExtractionStrategy:

PdfTextExtractor.GetTextFromPage(reader, 1, new SimpleTextExtractionStrategy()) 

最初是从微软报表服务生成的文件(我没有一个访问),并且我已经提取了一个页面来测试文本提取。

任何人都可以帮忙吗?

+3

您的PDF根本不包含根据PDF规范进行文本提取所需的信息。尝试从Adobe Reader复制并粘贴缺失的文本部分,您会发现它也会失败。 Microsoft Reporting Service长期以来一直在创建不足以进行文本提取的PDF。 – mkl

+2

此外,发布代码时,请以合理的方式进行。您发布的代码会创建一个PDF阅读器和一个不用于任何内容的提取策略,然后文本提取器使用默认的提取策略从一些模子的阅读器中提取... – mkl

+0

感谢您的答复。就像你问的那样,我修复了那些无知的代码。 如果acrobat阅读器显示它,它如何不包含信息(如数字值)? – Hefass

回答

-1

试试这个: -

PdfReader reader = new PdfReader(file); 
StringBuilder currentText= new StringBuilder(); 
for (int i= 1; i <= reader.NumberOfPages; i++) 
{ 
    currentText.Append(PdfTextExtractor.GetTextFromPage(reader, i)); 
} 

,然后执行您想要的 “currentText” 无论操作。

+0

PDF中只有一个页面。遍历文档中的所有页面都无济于事。正如@mkl所示,这是一个“垃圾进入垃圾”问题:文本甚至无法使用Adobe Reader中的复制/粘贴功能进行提取。 –

+0

您的建议实际上是迭代所有PDF页面,而不是只查看第一个页面。由于OP的示例文档只有一个页面,所以这不会造成差别。然而,与OP的代码相反,您的代码至少是一致的...... – mkl

+0

您绝对是对的。其实,我没有检查.pdf文件本身。刚刚发布了一个更好的代码,他迄今为止所做的一切。 – Nitin