避免阅读 PDF 中的隐藏文本

Avoid reading hidden text from PDF

我正在使用 iText 库阅读 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);
 }

它也在阅读隐藏文本;有人可以建议我需要设置哪个 属性 以便它不读取隐藏文本吗?

使用渲染模式 3(既不是填充文本也不是描边文本(不可见))从坐标 0,0(左下角)开始绘制 PDF 中的每一段额外的不可见文本。

在那种情况下,应该按渲染模式进行过滤。为此,您必须明确地将策略设置为过滤策略。

您在代码中使用的 getTextFromPage 重载

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

定义为

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);