![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=1738915341-MM2THelG6N8dvsL9HKK2w5fCoe4kreF6-0-38a815b55e508e90984ac07faece6f7a)
再次强调,我们安装的是 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=1738915341-Un8fWaXEoSw9gKhDbdlCvOdNd1JWBRh6-0-b5627f955d92f2feb89ec43915145a0c)
【例3-21】 将指定目录下的.pdf文件的内容读取到一个.txt文件中。
![](https://epubservercos.yuewen.com/ED6D45/13898202805418106/epubprivate/OEBPS/Images/122_3.jpg?sign=1738915341-KgLeGGRZwVw94DQxdkWrFCKJxuNZHTLZ-0-5c93ded473f0679436287ef5dd6aafc3)
![](https://epubservercos.yuewen.com/ED6D45/13898202805418106/epubprivate/OEBPS/Images/123_1.jpg?sign=1738915341-DAXAqqyJQAno4v349eds3WCXqsIo2PwV-0-da2a26e9f3b6790a2486d9e19e06e49b)
运行以上程序后打开“D:\PythonTest\pdf_document\pdf_text_1.txt”文件,.txt文本文件中的部分内容显示如下:
![](https://epubservercos.yuewen.com/ED6D45/13898202805418106/epubprivate/OEBPS/Images/124_1.jpg?sign=1738915341-sD5niLJAkBHguwY0HKE4Ki4rbHursGlf-0-33dbf44746912b37670d6a19fdb04607)
处理.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列表)。