在itextpdf中应用位置提取策略后,我们可以使用文本提取策略吗?

我使用以下代码从特定位置获取PDF格式的数据。 我希望在该位置显示大胆的文字。

Rectangle rect = new Rectangle(0,0,250,250); RenderFilter filter = new RegiontextRenderFilter(rect); fontBasedTextExtractionStrategy strategy = new fontBasedTextExtractionStrategy(); strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter); //Throws Error. 

首先,创建一个名为fontBasedTextExtractionStrategy的新方法,而不是文本简单的TextExtractionStrategy帮助? 像下面的东西

  public class fontBasedTextExtractionStrategy implements TextExtractionStrategy { private String text; @Override public void beginTextBlock() { } @Override public void renderText(TextRenderInfo renderInfo) { text = renderInfo.getText(); System.out.println(renderInfo.getFont().getFontType()); System.out.print(text); } @Override public void endTextBlock() { } @Override public void renderImage(ImageRenderInfo renderInfo) { } @Override public String getResultantText() { return text; } } 

但又怎么称呼它呢?

请查看ParseCustom示例。 在此示例中,我们创建了一个自定义RenderFilter (而不是TextExtractionStrategy ):

 class FontRenderFilter extends RenderFilter { public boolean allowText(TextRenderInfo renderInfo) { String font = renderInfo.getFont().getPostscriptFontName(); return font.endsWith("Bold") || font.endsWith("Oblique"); } } 

此文本将过滤所有文本,以便只有Postscript字体名称以Bold或Oblique结尾的文本。

这是您使用此filter的方式:

 public void parse(String filename) throws IOException { PdfReader reader = new PdfReader(filename); Rectangle rect = new Rectangle(36, 750, 559, 806); RenderFilter regionFilter = new RegionTextRenderFilter(rect); FontRenderFilter fontFilter = new FontRenderFilter(); TextExtractionStrategy strategy = new FilteredTextRenderListener( new LocationTextExtractionStrategy(), regionFilter, fontFilter); System.out.println(PdfTextExtractor.getTextFromPage(reader, 1, strategy)); reader.close(); } 

如您所见,我们创建了一个FilteredTextRenderListener ,它接受两个filter,一个RegionTextRenderFilter和我们基于字体的自制filter。