2015-10-07 91 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