[英]How can I get the page number and position for a specific pdf form field and insert a table in it's place in iText7?
[英]How can I get the position of the specified keyword in iText7?
我想在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的信息: 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处理开箱即用的情况,减轻您的负担。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.