使用呈現模式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);
來源
2016-05-20 17:09:00
mkl
該文本是如何隱藏的?它是否僅僅在頁面邊界之外?然後按面積過濾。它是白色的還是白色的或無形的呈現?然後按這些標準過濾。它是否覆蓋了其他內容?爲此,您需要相應地擴展提取策略。 – mkl
感謝您的建議。我有PDF,並在使用Java從文件中讀取文本時,我使用PDF閱讀器獲取肉眼不可見的文本。但我會試着找出它是如何變得無形的,並遵循相應的方式。 – sunafi
或者,您可以分享您的PDF文件進行分析。 – mkl