gpt4 book ai didi

java - 如何获取指定关键字在iText7中的位置?

转载 作者:行者123 更新时间:2023-12-02 06:24:03 26 4
gpt4 key购买 nike

我想搜索 pdf 文件中的每个匹配关键字并获取它们在它们所在页面中的位置。

我刚刚在 iText5 中找到了一些代码,看起来符合我的需要

for (i = 1; i <= pageNum; i++)
{
pdfReaderContentParser.processContent(i, new RenderListener()
{

@Override
public void renderText(TextRenderInfo textRenderInfo)
{
String text = textRenderInfo.getText();
if (null != text && text.contains(KEY_WORD))
{
Float boundingRectange = textRenderInfo
.getBaseline().getBoundingRectange();
resu = new float[3];
System.out.println("======="+text);
System.out.println("h:"+boundingRectange.getHeight());
System.out.println("w:"+boundingRectange.width);
System.out.println("centerX:"+boundingRectange.getCenterX());
System.out.println("centerY:"+boundingRectange.getCenterY());
System.out.println("x:"+boundingRectange.getX());
System.out.println("y:"+boundingRectange.getY());
System.out.println("maxX:"+boundingRectange.getMaxX());
System.out.println("maxY:"+boundingRectange.getMaxY());
System.out.println("minX:"+boundingRectange.getMinX());
System.out.println("minY:"+boundingRectange.getMinY());
resu[0] = boundingRectange.x;
resu[1] = boundingRectange.y;
resu[2] = i;
}
}

@Override
public void renderImage(ImageRenderInfo arg0)
{
}

@Override
public void endTextBlock()
{

}

@Override
public void beginTextBlock()
{
}
});

但我不知道如何在 iText7 中处理它。

最佳答案

iText7 有 pdf2Data附加组件可以轻松帮助您实现目标(并帮助处理其他数据提取案例)。

假设您要提取单词 Header 的位置。我们去https://pdf2data.online演示应用程序,上传我们的模板(包含要提取的单词的任何文件),然后转到数据字段编辑器,如下所示:

pdf2Data data field editor

现在,您可以添加一个带有选择器的数据字段,该选择器将选择您感兴趣的数据。在这种情况下,您可以使用正则表达式选择器,它通常非常灵活,但在我们的情况下,设置非常简单:

data field configuration

您可以看到编辑器应用程序突出显示了我们正在搜索的单词的所有出现位置。现在,让我们回到第一步(编辑器右上角有一个图标可以返回演示),并下载我们的模板(链接到上传文件对应的图标底部)。

现在您可以在此页面查看有关如何在项目中包含 pdf2Data 的信息:https://pdf2data.online/gettingStarted ,大致需要的代码如下:

LicenseKey.loadLicenseFile("license.xml");

Template template = Pdf2DataExtractor.parseTemplateFromPDF("Template.pdf");
Pdf2DataExtractor extractor = new Pdf2DataExtractor(template);
ParsingResult result = extractor.recognize("toParse.pdf");
for (ResultElement element : result.getResults("Headers")) {
Rectangle bbox = element.getBbox();
int page = element.getPage();
System.out.println(MessageFormat.format("Coordinates on page {0}: [{1}, {2}, {3}, {4}]",
page, bbox.getX(), bbox.getY(), bbox.getX() + bbox.getWidth(), bbox.getY() + bbox.getHeight()));
}

示例输出:

Coordinates on page 1: [38.5, 788.346, 77.848, 799.446]
Coordinates on page 1: [123.05, 788.346, 162.398, 799.446]
Coordinates on page 1: [207.6, 788.346, 246.948, 799.446]
Coordinates on page 2: [38.5, 788.346, 77.848, 799.446]
Coordinates on page 2: [123.05, 788.346, 162.398, 799.446]
Coordinates on page 2: [207.6, 788.346, 246.948, 799.446]

pdf2Data 插件是闭源的,目前仅在商业许可选项下可用。当然,可以将您的代码直接移植到 iText7,这将是您所面临的任务的另一种解决方案,但我必须警告您,您的代码并不适用于所有场景,例如PDF 中的文本可以逐个字母写入,而不是一次写入整个单词(两个 PDF 的视觉外观很容易保持相同),在这种情况下,您附加的代码将不起作用。 pdf2Data 开箱即用地处理这些情况,减轻您肩上的负担。

关于java - 如何获取指定关键字在iText7中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55807256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com