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

2024-04-26 09:33:44 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我花了一个月的大部分时间在这个问题上。我正在寻找一种方法来提取几何元素(折线,文本,弧等)从一个矢量化的PDF文件组织的ocg(可选内容组),基本上是PDF层。使用PDFminer,我能够提取几何体(LTCurves、lttextbox、LTLines等);使用PyPDF2,我能够查看PDF中有多少OCG,尽管我无法访问与该OCG相关的几何体。我在网上看到和尝试过的一些黑客脚本可能能够解决这个问题,但没有效果。我甚至求助于在文本编辑器中打开原始的PDF数据,然后半不小心地删除其中的一部分,看看能否想出一些自定义的解析技术来实现这一点,但还是没有用。Adobe的PDF手册充其量是最小的,所以当我试图创建解析器时,这并没有任何帮助。有人知道解决这个问题的办法吗。在

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

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


Tags: 方法文本元素内容pdf时间解决方案折线
2条回答

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

事实上,存在OCG及其名称,以及关于它们的一些信息都存储在面向对象的内容中,并且可以通过相当容易地解析对象内容来提取。但是OCG的成员关系并不存储在对象结构中。它只能通过解析内容流找到。当内容运算符/OC/选项contentgroupnameBDC前接运算符EMC时,标记运算符组是特定OCG组的成员。在

解析内容流是一项不那么简单的任务。有很多工具可以帮你做到这一点。我本人不会试图从头开始构建这样一个解析器。重写轮子没有什么价值。在

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

如果您的PDF是在OGC层中组织的,那么您可以使用gdal_translate命令GDAL。在

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

gdalinfo "sample.pdf" -mdd LAYERS

然后,使用以下to命令提取分区层:

^{pr2}$

更多细节请参考here。在

相关问题 更多 >