Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在itextpdf中应用位置提取策略后,我们可以使用文本提取策略吗?_Java_Itext - Fatal编程技术网

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

Java 在itextpdf中应用位置提取策略后,我们可以使用文本提取策略吗?,java,itext,Java,Itext,我使用以下代码从特定位置获取PDF格式的数据。我希望在该位置显示粗体文本 Rectangle rect = new Rectangle(0,0,250,250); RenderFilter filter = new RegiontextRenderFilter(rect); fontBasedTextExtractionStrategy strategy = new fontBasedTextExtractionStrategy(); strategy = new FilteredTextRen

我使用以下代码从特定位置获取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;
    }
}
但是,如何正确地调用它呢?

请看一看这个例子。在本例中,我们创建了一个自定义的
RenderFilter
(而不是
TextExtractionStrategy
):

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

以下是使用此筛选器的方式:

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
和基于字体的自制过滤器。

构造函数FilteredTextRenderListener(LocationTextExtractionStrategy,RenderFilter,ParseCustom.FontRenderFilter)是undefined@NavalKishorJha如你所见,对这个问题的回答被接受并投了赞成票。可以放心地假设它是正确的。如果它对您不起作用,您可能正在使用太旧(在这种情况下需要升级)或太新(在这种情况下需要进行小的更改)的iText版本。由于你没有告诉我们你使用的是哪个版本,没有人能帮你。我有itext5.5.9版本,你能告诉我们你使用的api的itext版本吗。我已经从这个来源查过了。您需要的构造函数显然就在那里:
FilteredTextRenderListener(textextextractionstrategy委托,RenderFilter…过滤器)
LocationTextExtractionStrategy
是从
TextExtractionStrategy
派生的,您使用两个
RenderFilter
对象作为额外参数。因此,您声称构造函数
FilteredTextEnderListener(LocationTextExtractionStrategy,RenderFilter,ParseCustom.FontRenderFilter)
未定义是没有意义的。
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();
}