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

1 python pdf pypdf pdfminer ocg

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

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

这里有人能帮助结束这个黑暗的兔子洞吗?非常感激!

小智 5

PDF 文档由两种“类型”的数据组成。文档有一个面向对象的“结构”,将其分为页面,并携带元数据(例如,有可选内容组的列表),并且有一个面向流的标记运算符列表,实际上“将”内容绘制到页面上。

事实上,存在 OCG、它们的名称以及有关它们的一些信息存储在面向对象的内容上,并且可以通过相当容易地解析对象内容来提取。但 OCG 的成员资格并不存储在对象结构中。它只能通过解析内容流来找到。当一组标记操作符前面是内容操作符 /OC / optionacontentgroupname BDC 且后面是操作符 EMC 时,它就是特定 OCG 组的成员。

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

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