【发布时间】:2010-11-19 23:07:19
【问题描述】:
我根本不熟悉 PDF 规范。我想知道是否可以直接操作 PDF 文件,以便我确定为重要的某些文本块以我选择的颜色突出显示。选择的语言是python。
【问题讨论】:
我根本不熟悉 PDF 规范。我想知道是否可以直接操作 PDF 文件,以便我确定为重要的某些文本块以我选择的颜色突出显示。选择的语言是python。
【问题讨论】:
使用 PDF 注释可以在 pdf 文件中突出显示,但在本机进行此操作并不容易。如果任何提到的图书馆提供这样的设施是你可能会寻找的东西。
【讨论】:
这是可能的,但不一定容易,因为 PDF 格式非常丰富。您可以找到详细描述它的文档here。它给出的第一个关于 PDF 如何显示文本的基本示例是:
BT
/F13 12 Tf
288 720 Td
(ABC) Tj
ET
BT 和 ET 是开始和结束文本对象的命令; Tf 是使用大小为 12 的外部字体资源 F13(恰好是 Helvetica)的命令; Td 是将光标定位在给定坐标处的命令; Tj 是为前一个字符串编写字形的命令。这种风格有点像“反向抛光符号”-oid,并且确实非常接近 Postscript 的风格,这是 Adobe 对排版的其他重要贡献之一。
问题是,PDF 规范中没有任何内容表明“看起来”像它在显示的页面上属于一起的文本实际上必须“存在”在一起;由于总是可以给出精确的坐标,如果 PDF 是由复杂的排版布局系统生成的,它可能会逐个字符、按坐标精确定位文本。因此,以单词和句子的形式重构文本并不一定容易——它几乎和光学文本识别一样难,只是你得到了精确的字符(嗯——几乎……一些所谓的“图像”实际上可能显示为字符...;-)。
pyPdf 是一个非常简单的纯 Python 库,是处理 PDF 文件的良好起点。它的“文本提取”功能非常基本,除了连接几个文本绘图命令的参数外什么也不做;您会发现这在某些文档上就足够了,而在其他文档上则完全无法使用,但至少这是一个开始。在分发时,pyPdf 对颜色几乎没有任何作用,但有一些可以补救的黑客行为。
reportlab 强大的 Python 库完全专注于生成新的 PDF,而不是解释或修改现有的 PDF。在另一个极端,纯 Python 库pdfminer 完全专注于解析 PDF 文件;它确实会进行一些聚类以尝试在更简单的库被难倒的情况下重建文本。
我不知道现有的库可以执行您想要的转换任务,但是混合和匹配其中一些现有的库以完成大部分任务应该是可行的......祝你好运!
【讨论】: