当前位置: 首页 > 面试题库 >

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

从景曜
2023-03-14
问题内容

我使用以下代码从特定位置获取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字体名称以粗体或斜体结尾的文本。

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

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



 类似资料:
  • 我设置我的类,以便使用Laravel授权和策略功能。但是,在为我的方法定义中间件时,我一直遇到这个错误(类App\Policies\StatusPolicy不存在)。这就是我所拥有的: AuthServiceProvider。php ontroller.php 状态策略。php(由php artisan生成):策略状态策略--model=Status

  • 我正在尝试将基于时间的触发策略与log4j-2.13一起使用。2,它与spring boot 2.3一起嵌入。0.0释放(spring-boot-started-log4j2)。预期的功能是每天创建一个日志文件。 我的配置文件如下所示: 但是,在启动应用程序时,会引发以下异常: 如果我改变文件模式: 不再引发异常,但文件名为“log-%d{yyyyMMdd}.log”,而不是“log-202005

  • 我有一个spring boot项目,它使用以下设置运行: 我发现hibernate在映射atributes时没有将camelCase转换为SNAKE_CASE,而是将upper_case应用于它(因为Oracle不区分大小写,所以这并不重要): 这是我的实体: 编辑 我发现我的项目使用的是spring Boot1.4.5.发行版,但由于其他无可争议的原因,Hibernate的版本是4.2.19.f

  • 自动化平台 默认 fullReset noReset iOS (包括XCUITest) 测试完成后关闭模拟器。不销毁模拟器。不从真机上卸载应用。 测试完成后卸载应用, 模拟器测试结束后销毁模拟器。 测试结束后不销毁或者关闭模拟器。启动测试运行在任意正在运行的模拟器或者插入的真机。 Android 测试结束后停止应用,清理应用数据,不卸载应用包。 测试结束后停止应用,清理应用数据,卸载应用包。 不停

  • 本地策略可以配置一些用户相关的权限,比如连接超时设置。V2Ray 处理的每一个连接,都对应到一个用户,按照这个用户的等级(level)应用不同的策略。本地策略可按照等级的不同而变化。 PolicyObject PolicyObject对应配置文件中的policy项。 { "levels": { "0": { "handshake": 4, "connIdle":

  • 问题内容: 我正在尝试对PassportJS使用多种本地策略。我不尝试使用本地,facebook和gmail等。我将两组用户存储在单独的对象中,并且我想使用本地策略对两者进行身份验证。就目前而言,我不能对两者使用相同的本地策略,因为它们具有不同的对象属性,这使我查询不同的对象。有什么办法吗?或对此的任何建议将不胜感激。 问题答案: 我认为这是不可能的,因为据我所知,您需要一种在第一个策略失败时将请