从PDF中提取带有坐标和大小的图像和文字

8
我已经阅读了很多关于PDF提取和库(如iText)的内容,但我仍然没有找到一种从PDF中提取图像和文本(带坐标)的解决方案。
任务是扫描产品目录PDF并提取每个图像。每个图像旁边都有一个“图像代码”,还有一个列出显示在图像上的产品的“产品代码”列表。
我知道无法从这样的PDF中提取结构化信息,但是通过所有图像和文本对象的坐标,我可以编写代码来识别与图像距离相近的链接文本。然后,我可以使用正则表达式拆分文本,并找出哪些是“产品代码”,哪些是“图像代码”等。
您能推荐一个好的、有效的解决方案吗?

1
你是否针对特定的平台/语言进行开发?当你说“扫描”时,是指“浏览”还是实际上正在扫描物理对象,因此需要OCR功能? - Chris Haas
感谢您的回复!我使用.NET进行编程,因此任何具有.NET移植的库都很好。但我也了解JAVA,所以在紧急情况下,我可以使用Java库。无论如何,我不需要OCR。我的PDF包含文本和图像。文本呈现在PDF的内容流中,因此我需要一种解析器/渲染器,只需告诉我字符串应该呈现在页面的哪个位置。我只需要坐标。 - Alex
3个回答

4

使用XPDF (http://www.foolabs.com/xpdf/)

它可以提取PDF中的所有字符,带有坐标信息(pdftotext -bbox [源文件] [输出文件]),并且还可以提取PDF中的所有图像和SVG格式。

它是开源软件(GPLv2),并支持许多其他提取功能。


我已经使用 pdftotext 多年了,从来没有意识到它有这个功能!以前从来没有找到过如何轻松提取坐标。 - fred2
2
这正确吗?bbox选项对我似乎不起作用,而且在文档中找不到任何相关信息。 - jss

0

有几个Java库可以做到这一点。你看过JPedal或PdfBox吗?


我刚刚尝试了使用RenderListener的iTextSharp。它似乎可以工作,但效果不是很好。对于我的PDF,iTextSharp返回具有正确坐标的图像,但所有文本层的坐标都不正确。我认为我的PDF有两个文本层,而iTextSharp没有给我坐标。我试图在图像框上绘制iTextSharp返回的内容,很快就发现有3个层(1个用于图像,2个用于文本),而这些层根本没有对齐。 - Alex
你能分享一下提取图像坐标的代码吗?renderImage接收ImageRenderInfo作为参数,我该如何从中提取坐标呢? - letronje

0
如果商业库是您的选择,您可以尝试Amyuni PDF Creator .NetAmyuni PDF Creator ActiveX。您可以使用方法IacDocument.GetObjectsInRectangle检索所有感兴趣的“图形对象”,然后使用ObjectType属性将图像与文本分开。该库已经提供了一个算法来将相邻的文本放在一起。从文档中可以看到:
IacDocument.GetObjectsInRectangle Method

The GetObjectsInRectangle method gets all the objects that are in the specified rectangle.

适用于通常的免责声明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接