![Python程序设计](https://wfqqreader-1252317822.image.myqcloud.com/cover/842/25449842/b_25449842.jpg)
3.4 处理.pdf文件
Python 之所以强大,在于它有大量第三方库的支持(几乎每个月都有新的库产生),同一问题往往可用多个库解决。Python 对.pdf 文件的处理也不例外。这里,选择以 PDFMiner 库[7]为例来介绍对.pdf 文件的处理。也许当你拿到本书时,你已经有更好的库来处理.pdf文件了,那就用你喜欢的库吧,只要能解决问题就好。
1.安装PDFMiner库
在Windows命令行窗口下,通过命令“pip list”查看是否安装此库。如果没有,使用 pip 工具进行安装。这里,先使用一个第三方库 PDFMiner3K 把.pdf 文件读成字符串,然后用StringIO将其转换成文件对象。注意安装库的名字是“pdfminer3k”,如下:
![](https://epubservercos.yuewen.com/ED6D45/13898202805418106/epubprivate/OEBPS/Images/122_1.jpg?sign=1738844322-VqavkVUuTqH2XIm7LDCkeqljx9XeXWOt-0-8304fa5e67b57f8130a03d5a08682e5c)
再次强调,我们安装的是 Anaconda 环境。如果要分析现有.pdf 文件的内容,可用PDFMiner。
2.处理.pdf文件
在具体使用 PDFMiner 库处理.pdf 文件之前,需要先学习解析.pdf 文件用到的类(见表3-5)[8]。
表3-5 PDFMiner库中解析.pdf文件常用的类
![](https://epubservercos.yuewen.com/ED6D45/13898202805418106/epubprivate/OEBPS/Images/122_2.jpg?sign=1738844322-3POLEeZvn2KvkeGgPjsqSrNROM3uwaWH-0-aa5f59b4b568a2e6ab91bfa459c11054)
【例3-21】 将指定目录下的.pdf文件的内容读取到一个.txt文件中。
![](https://epubservercos.yuewen.com/ED6D45/13898202805418106/epubprivate/OEBPS/Images/122_3.jpg?sign=1738844322-6PC7bKLQZuxV6oaGLDWupMUWLU9HMw4j-0-6cd76a6d21df07ef272f31729bb2607a)
![](https://epubservercos.yuewen.com/ED6D45/13898202805418106/epubprivate/OEBPS/Images/123_1.jpg?sign=1738844322-aRzk9u91re1yDLCIJs5sUsLSscQFWe29-0-7911a36c2fd2e64e3ece0e1da5238f6d)
运行以上程序后打开“D:\PythonTest\pdf_document\pdf_text_1.txt”文件,.txt文本文件中的部分内容显示如下:
![](https://epubservercos.yuewen.com/ED6D45/13898202805418106/epubprivate/OEBPS/Images/124_1.jpg?sign=1738844322-498qszD86D0qraDmuUznguYHIKJd0Jtr-0-662f3119d18a21d5d036dc56a221c174)
处理.pdf文件的基本思路和流程:
(1)打开文件(二进制方式),声明文件对象。
(2)用文件对象创建一个文件解析器对象(PDFParser)。
(3)创建一个 pdf 文件对象,用于存储文件结构(PDFDocument),PDFDocument与PDFParser是相互关联的。
(4)连接pdf文件解析器和pdf文件对象(praser.set_document、doc.set_parser)。
(5)创建一个pdf资源管理器对象来存储共享资源(PDFResourceManager)。
(6)创建一个pdf页面聚合对象,作为PDFPageInterpreter的参数传入(PDFPage-Aggregator)。
(7)创建一个pdf解析器对象来解析page页面内容(PDFPageInterpreter)。
(8)处理文件中每一个page页面的内容(get_pages()获取page列表)。