首页 > 解决方案 > 通过 OCG(按层)从 PDF 中提取几何元素

问题描述

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

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

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

标签: pythonpdfpypdf2pdfminerocg

解决方案


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

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

解析内容流是一项不那么简单的任务。有许多工具可以为您做到这一点。我自己不会尝试从头开始构建这样的解析器。重写轮子没有什么价值。

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


推荐阅读