通过OCG(按图层)从PDF中提取几何元素

时间:2018-08-23 20:04:18

标签: python pdf pypdf2 pdfminer ocg

所以我在这个问题上花了一个月的大部分时间。我正在寻找一种从文件的OCG(可选内容组)组织的矢量化PDF中提取几何元素(折线,文本,弧等)的方法,这些文件基本上是PDF层。使用PDFminer,我能够提取几何图形(LTCurves,LTTextBoxes,LTLines等);使用PyPDF2,尽管我无法访问与该OCG相关的几何图形,但能够查看PDF中有多少个OCG。我见过一些骇人听闻的脚本,并在网上尝试过,它们也许能够解决此问题,但无济于事。我什至诉诸于在文本编辑器中打开原始PDF数据,并半危险地删除其中的一部分,以查看是否可以采用某种自定义解析技术来做到这一点,但仍然无济于事。 Adobe的PDF手册充其量是最少的,因此在尝试创建解析器时没有帮助。有谁知道解决方案。

在这一点上,我愿意使用任何操作系统的任何语言的解决方案(尽管我更喜欢在Windows或Linux上使用Python 3的解决方案),只要它是开源/免费的即可。

这里有人可以帮助结束这个兔子的黑暗之洞吗?非常感谢!

3 个答案:

答案 0 :(得分:3)

PDF文档包含两种“类型”的数据。该文档有一个面向对象的“结构”,可以将其分为页面,并携带元数据(例如,有可选内容组的列表),还有一个面向流的标记操作符列表,这些操作符实际上是“在页面上绘制“内容。

存在OCG,它们的名称以及一些有关它们的事实存储在面向对象的内容上,可以通过相当容易地解析对象内容来提取。但是OCG的成员身份不存储在对象结构中。只能通过解析内容流来找到它。内容运算符/ OC / optionacontentgroupname BDC之前,一组标记运算符是特定OCG组的成员,然后是运算符EMC。

解析内容流不是一件容易的事。有很多工具可以为您完成此任务。我本人不会尝试从头开始构建这样的解析器。重写轮子没有什么价值。

可从许多来源获得PDF的完整语法。在Web上搜索“ PDF规范1.7”或“ ISO32000-1:2008”。这是一个令人生畏的文档,但是它确实提供了创建对象和内容解析器所需的所有信息

答案 1 :(得分:1)

如果您的PDF是用OGC图层组织的,则可以使用GDAL gdal_translate 命令。

使用以下命令检查PDF文件中所有可用的OGC层:

gdalinfo "sample.pdf" -mdd LAYERS

然后,使用以下命令提取颗粒层:

gdal_translate "sample.pdf" -of PNG sample.png --config GDAL_PDF_LAYERS "your_specific_layer_name"

提到了更多详细信息here

答案 2 :(得分:-1)

嘿@pythonic_programmer,我可以使用这个python 库pdflayers 将图层的默认视图(可见/不可见)禁用到新的pdf 文件中。 https://pypi.org/project/pdflayers/

几乎意味着禁用图层的默认状态 在 pdf 文件中:https://helpx.adobe.com/acrobat/using/pdf-layers.html

任何不可见的图层意味着该图层在您处理时不会渲染到 pdf 文档(默认情况下)。