2011-11-23 165 views
5

我已经读了很多关于PDF提取和库(作为iText),但我只是没有找到一个解决方案从PDF提取图像和文本(与坐标)。提取图像和文字的坐标和大小从PDF

任务是扫描PDF产品目录并提取每个图像。在每张图片旁边印有图片代码,以及图片上显示的产品的产品代码列表

我知道没有办法从这样的PDF中提取结构化信息,但所有图像和文本对象的坐标我可以编写代码来识别链接文本的距离与图像的距离。然后,我可以用一个RegExp拆分文本,并找出哪些是产品代码,什么是图像代码

你能推荐任务的好和工作的解决方案?

+1

您是否针对特定的平台/语言?当你说“扫描”的意思是“透视”,或者你实际上是在扫描一个物理对象,并为此需要OCR功能吗? –

+0

感谢您的回复! 我在.NET中编程,因此任何具有.net移植的库都很好。但我也知道JAVA所以在极端我可以使用Java库。 反正我不需要OCR。我的PDF包含文字和图像。文本呈现在PDF的内容流中,所以我需要某种解析器/渲染,它告诉我一个字符串应该在页面上呈现的位置。我只需要这些坐标。 – Alex

回答

0

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

+0

我刚刚尝试过使用RenderListener的iTextSharp。它似乎工作,但不是很好。 iTextSharp为我的PDF返回具有正确坐标的图像,但所有文本图层都有错误的坐标。我认为我的PDF有2个文本层,iTextSharp不给我坐标。 我试图在一个图像盒上绘制iTextSharp返回的内容,我可以很快看到有3个图层(1个图像和2个文本),并且此图层根本不对齐。 – Alex

+0

你能分享你用来提取图像坐标的代码吗? 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. 

通常的免责声明适用。

3

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

它可以提取与坐标(pdftotext -bbox [sourcefile] [outputfile]),并在PDF中所有图像和SVGs的PDF中的所有字符。

它是开源的(GPLv2),并且支持很多额外的提取功能。

+0

我一直在使用pdftotext多年,从来没有twigged它有这个功能!从未能够解决如何轻松提取坐标。 – fred2

+1

这是正确的吗? bbox选项似乎不适用于我,我在文档中找不到任何关于它的信息。 – jss