避免阅读 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);
我正在使用 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);