通过编程方式更改PDF中文本的字体颜色
我对PDF的规范一点都不熟悉。我在想,是否可以直接对一个PDF文件进行操作,让我认为重要的某些文字块用我选择的颜色进行高亮显示。我的编程语言选择是Python。
2 个回答
在PDF文件中,可以通过PDF注释来实现高亮,但要想直接在PDF中做到这一点并不简单。如果你使用的库中有提供这种功能,那就可以考虑一下。
这是可能的,但并不一定简单,因为PDF格式非常复杂。你可以在这里找到详细描述它的文档。文档中第一个关于PDF如何显示文本的简单例子是:
BT
/F13 12 Tf
288 720 Td
(ABC) Tj
ET
BT和ET是开始和结束文本对象的命令;Tf是一个命令,用来使用外部字体资源F13(恰好是Helvetica字体),大小为12;Td是一个命令,用来将光标放置在指定的坐标位置;Tj是一个命令,用来写出之前字符串的字形。这种方式有点像“逆波兰表示法”,实际上与Adobe的另一个排版贡献Postscript的风格非常接近。
问题在于,PDF规格中并没有说明在页面上“看起来”属于同一组的文本必须“实际”在一起;因为可以始终给出精确的坐标,如果PDF是由一个复杂的排版系统生成的,它可能会逐个字符地精确定位文本。因此,将文本重构成单词和句子并不一定简单——这几乎和光学字符识别一样困难,除了你已经得到了字符(好吧——几乎是这样……一些所谓的“图像”可能实际上显示为字符……;-)。
pyPdf是一个非常简单的纯Python库,是玩弄PDF文件的好起点。它的“文本提取”功能非常基础,只是将几个文本绘制命令的参数连接在一起;你会发现这在某些文档上足够用,但在其他文档上则完全不可用,不过至少这是一个开始。就目前的版本而言,pyPdf几乎不处理颜色,但通过一些修改可以解决这个问题。
reportlab的强大Python库完全专注于生成新的PDF,而不是解释或修改现有的PDF。在另一个极端,纯Python库pdfminer则完全专注于解析PDF文件;它确实会进行一些聚类,以尝试在简单库无法处理的情况下重构文本。
我不知道有没有现成的库可以完成你想要的转换任务,但应该可以将一些现有的库混合搭配,以完成大部分工作……祝你好运!