这是可能的,但不一定容易,因为PDF格式非常丰富。您可以找到详细描述它的文档here。第一个基本示例介绍了PDF如何显示文本:BT
/F13 12 Tf
288 720 Td
(ABC) Tj
ET
BT和ET是开始和结束文本对象的命令;Tf是使用外部字体资源F13(恰好是Helvetica)的命令,大小为12;Td是将光标定位在给定坐标的命令;Tj是为前一个字符串写入glyph的命令。它的风格有点像“反向波兰符号”(reverse-polish notation),而且确实非常接近Postscript的风格,Postscript是Adobe对排版的另一个重要贡献之一。在
问题是,PDF规范中没有任何规定,在页面上“看起来”像是属于一起的文本实际上必须“在”在一起;由于总是可以给出精确的坐标,如果PDF是由复杂的排版布局系统生成的,它可能会逐字符精确地定位文本,通过坐标。因此,以单词和句子的形式重建文本并不一定容易,它几乎和光学文本识别一样困难,只是你被精确地给出了字符(好吧,几乎。。。一些所谓的“图像”实际上可能显示为字符…;-)。在
pyPdf是一个非常简单的纯Python库,它是处理PDF文件的良好起点。它的“文本提取”功能非常简单,除了连接几个文本绘图命令的参数之外什么也不做;你会看到,在某些文档上已经足够了,而在其他文档上则很不可用,但至少这只是一个开始。在分发时,pyPdf对颜色几乎不做任何处理,但使用了一些可以补救的黑客攻击。在
reportlab强大的Python库完全专注于生成新的pdf,而不是解释或修改现有的pdf。在另一个极端,纯Python库pdfminer完全专注于解析PDF文件;它确实做了一些集群,试图在更简单的库遇到问题时重建文本。在
我不知道有没有一个现有的库可以执行您希望的转换任务,但是可以将这些现有的库混合并匹配以完成大部分任务。。。祝你好运!在