2015-10-07 90 views
1

我使用的是itext 5.3.4从PDF文件中提取文本。我正在使用的代码如下:通过iText提取PDF文本返回奇怪字符

PdfReaderContentParser parser = new PdfReaderContentParser(pdfReader); 
    TextExtractionStrategy strategy; 
    StringBuffer sb = new StringBuffer(); 

    for (int i = 1; i <= pdfReader.getNumberOfPages(); i++) 
    { 
     strategy = parser.processContent(i, new SimpleTextExtractionStrategy()); 
     sb.append(strategy.getResultantText()); 
    } 
    String text = sb.toString(); 

然而,对于特定的PDF,ë返回为°。任何想法为什么会发生这种情况,以及可以做些什么?这是在itext库中的错误还是在构建PDF时出现错误?

感谢您的协助。

+1

首先要测试的东西 - 不用担心,这很简单 - 就是用Acrobat Reader复制文本并粘贴到别处。如果Acrobat Reader无法忠实地阅读文本,则问题出现在PDF中的可能性很高。 – usr2564301

+1

还有一件事要做:请更新。 5.3.x版本是文本提取代码发生变化的时候。 – mkl

+1

请参阅http://stackoverflow.com/a/32929474/1520650以获取类似问题以及此行为的可能解释。 – rhens

回答

3

我看到了两个可能的原因:

1. PDF文档的问题

一些银行创建机密信息的文档。为了避免他们的文档被解析并且提取文档,他们故意创建一个带有不正确信息的CMap。一个字符被链接到一个字形(并且该字形被正确地渲染),但是还有一个字符到UNICODE符号的映射,并且该映射是故意错误的(以便不能提取内容)。

我展示这些电影这样一个文件的例子:

2. iText的是你正在使用的问题

一个从2012年11月2日开始的版本。在接下来的(几乎)三年中,我们已经修复了许多错误。如果升级到iText 5.5.7,也许你的问题已经解决了。

如果升级到iText 5.5.7不能解决问题,并且如果PDF不是问题,则可能在iText中遇到了一个错误。如果您在商业环境中使用iText,则您是iText Software的客户;在这种情况下,请通过仅供客户使用的封闭售票系统联系iText的支持人员。

+1

Thx Bruno,升级到itext 5.5.7版本解决了问题 – frederikdebacker