2016-05-16 53 views
0

我使用iText庫閱讀PDF閱讀隱藏文本避免PDF

PdfReader reader = new PdfReader(dir1 + iFileName); 

    for(int iCount=1; iCount<=reader.getNumberOfPages(); iCount++){ 

      String pageText = PdfTextExtractor.getTextFromPage(reader, iCount); 
      System.out.println(pageText); 
} 

在讀取隱藏的文本太;有人可以請建議我需要設置哪些屬性,以便它不讀取隱藏的文本?

+1

該文本是如何隱藏的?它是否僅僅在頁面邊界之外?然後按面積過濾。它是白色的還是白色的或無形的呈現?然後按這些標準過濾。它是否覆蓋了其他內容?爲此,您需要相應地擴展提取策略。 – mkl

+0

感謝您的建議。我有PDF,並在使用Java從文件中讀取文本時,我使用PDF閱讀器獲取肉眼不可見的文本。但我會試着找出它是如何變得無形的,並遵循相應的方式。 – sunafi

+0

或者,您可以分享您的PDF文件進行分析。 – mkl

回答

0

使用呈現模式3(既不填充也不包含筆畫文本(不可見)),從座標0,0(在左下角)開始繪製PDF中每一段額外的不可見文本。

在這種情況下,應該通過渲染模式進行過濾。爲此,您必須明確將策略設置爲過濾策略。

你在你的代碼

String pageText = PdfTextExtractor.getTextFromPage(reader, iCount); 

使用getTextFromPage超載被定義爲

public static String getTextFromPage(PdfReader reader, int pageNumber) throws IOException{ 
    return getTextFromPage(reader, pageNumber, new LocationTextExtractionStrategy()); 
} 

因此,你隱式使用的LocationTextExtractionStrategy。現在您必須過濾此策略,例如通過從您的代碼中替換該行,如下所示:

RenderFilter modeFilter = new RenderFilter(){ 
    public boolean allowText(TextRenderInfo renderInfo){ 
     return renderInfo.getTextRenderMode() != 3; 
    } 
}; 
TextExtractionStrategy strategy = new LocationTextExtractionStrategy(); 
strategy = new FilteredTextRenderListener(strategy, modeFilter); 
String pageText = PdfTextExtractor.getTextFromPage(reader, iCount, strategy); 
+0

非常感謝你分享你的知識。我是新來的PDF編碼,並不知道你有什麼共享。 +1,但似乎我還沒有資格投票。 – sunafi

+0

你可以接受答案(點擊左上角的勾號)。 – mkl