以编程方式更改PDF文本的字体颜色

12

我对PDF规范不够熟悉。我想知道是否可以直接操作PDF文件,以便将我标识为重要的某些文本块用我选择的颜色突出显示。偏好语言是Python。

2个回答

17

这是可能的,但并不一定容易,因为PDF格式非常丰富。您可以在此处找到一份详细描述PDF的文档(点击此处)。它给出了有关PDF如何显示文本的第一个基本示例:

BT
/F13 12 Tf
288 720 Td
(ABC) Tj
ET

BT和ET是开始和结束文本对象的命令;Tf是使用外部字体资源F13(恰好为Helvetica)大小为12的命令;Td是将光标定位在给定坐标处的命令;Tj是写入先前字符串字形的命令。味道有点像“逆波兰表示法”,确实非常接近Postscript的风格,后者是Adobe对排版的另一个伟大贡献之一。

问题是,PDF规范中没有任何内容表明看起来应该在页面上归为一组的文本必须实际上“被”放在一起;由于可以始终给出精确的坐标,如果PDF是由复杂的排版布局系统生成的,则可能通过坐标将文本精确地定位在字符级别。因此,以单词和句子形式重构文本并不容易 - 它几乎与光学文本识别一样困难,只是你已经准确地给出了字符(嗯 - 几乎......一些所谓的“图像”实际上可能显示为字符...;-)。

pyPdf是一个非常简单的纯Python库,是玩转PDF文件的良好起点。它的“文本提取”函数相当基本,仅将几个文本绘制命令的参数连接起来;你会发现这在一些文档上足够使用,在其他文档上则完全无法使用,但至少是一个开始。作为分发的内容,pyPdf几乎不处理颜色,但通过一些黑客行为可以进行修复。

reportlab强大的Python库完全专注于生成新的PDF文件,而不是解释或修改现有的PDF文件。另一个极端的纯Python库pdfminer 完全专注于解析PDF文件;它确实执行一些聚类以尝试在简单库遇到困难的情况下重构文本。

我不知道是否存在执行您所需转换任务的现有库,但混合和匹配其中一些现有库应该是可行的...祝好运!


我尝试读取一个PDF文件,但它是一些字符和流,我可以识别PDF和EOF以及许多特殊字符。是否有特定的编码?您能否分享一个简单的代码来搜索BT和ET,我有同样的问题,这个问题在http://stackoverflow.com/questions/12982188/how-to-access-lines-in-a-pdf-page-programmatically-and-give-them-different-color中也有提到。谢谢。 - Shan

0

在PDF文件中使用PDF注释可以实现高亮显示,但原生方式并不容易。如果任何提到的库提供这样的功能,那就是你可能要寻找的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接