1

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

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

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

4

3 回答 3

5

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

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

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

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

于 2018-08-24T22:08:21.753 回答
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"

这里提到了更多细节。

于 2019-08-26T10:18:45.960 回答
-1

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

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

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

于 2021-07-17T02:38:42.753 回答