在itextpdf中应用位置提取策略后,我们可以使用文本提取策略吗? [英] Can we use text extraction strategy after applying location extraction strategy in itextpdf?

查看:639
本文介绍了在itextpdf中应用位置提取策略后,我们可以使用文本提取策略吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I used the following code to get data in PDF from a particular location. I want to get bold text present in that location.

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帮助?类似下面的内容

To start with, creating a new method called fontBasedTextExtractionStrategy instead of text simple TextExtractionStrategy help? Something like below

 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结尾。

This text will filter all text so that only text of which the Postscript font name ends with Bold or Oblique.

这是您使用此过滤器的方式:

This is how you use this 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 需要两个过滤器, RegionTextRenderFilter 以及基于字体的自制过滤器。

As you can see, we create a FilteredTextRenderListener that takes two filters, a RegionTextRenderFilter and our self-made filter based on the font.

这篇关于在itextpdf中应用位置提取策略后,我们可以使用文本提取策略吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆