每个文档页面一般都有一些文本内容,如果需要获取这些文本,可以试一下PageObject对象的extract_text()方法,代码如下:
from PyPDF2 import PdfReader
reader = PdfReader("./pdf_ files/练习文档.pdf")
page_text_dict = dict()
for index,page in enumerate(reader.pages):
print(f"当前是第{index}页的内容")
page_text = page.extract_text()
# print(page_text)
page_text_dict.update({index:page_text})
print(page_text_dict)
# 输出:{0:'Python 由荷兰......',1:'证明\n兹证明......'}
从PDF练习文档的内容来看,提取的文本并没有什么问题,主要是因为这个文档的内容比较简单。如果文档结构比较复杂,比如说存在各种公式图表,使用了多国语言符号等情况,又或者使用了pypdf2不支持的PDF生成器,那么提取出来的内容就不一定正确了。这也没办法,如果遇到复杂的文档,就算使用专业的PDF编辑软件也不一定能正确提取。还要注意的是,如果文档复杂,则提取出来的文本的顺序也不一定是正确的。
如果对使用pypdf2提取出来的文本不太满意,可以考虑使用其他库试一下,比如说可以使用pymupdf库。pymupdf库的处理速度非常快,而且支持的文档格式很多,比如说PDF、XPS、OpenXPS、CBZ(漫画书)、EPUB(电子书)等。当然,功能强大也意味着要学的东西就多,如果你学又有余力的话可以找一下相关的资料认真享受一番,我这里只演示如何用它提取文本。
首先我们要安装pymupdf,所有第三方的库都要安装才能使用,代码如下:
pip install pymupdf
安装pymupdf库的时候,实际上会安装很多其他的依赖库,但提取文本只用f i tz就够了,看一下怎么提取PDF的文本内容,代码如下:
import fitz
pdf = fitz.open("./pdf_ files/练习文档.pdf")
page_text_dict = dict()
for index,page in enumerate(pdf.pages()):
print(f"当前是第{index}页的内容")
# print(page_text)
page_text = page.get_text()
page_text_dict.update({index:page_text})
print(page_text_dict)
# 输出:{0:'Python 由荷兰......',1:'证明\n兹证明......'}
虽然你会感觉pymupdf很陌生,但看了上面的代码就会发现其实也并不难,首先是用f i tz.open()打开一个PDF文档,然后访问它的pages()方法获取到所有页面,再遍历这些页面,调用页面的get_text()方法就提取到所有文本了,本身并没有太大的难度。
不管是pypdf2还是pymupdf,又或者是我们之前学过的处理Office文档的各种库,都是通过访问对象的属性或方法获取我们想要的数据,这就是面向对象编程思维的特点。以后遇到了其他没有学过的库也不要担心,先看一下文档或源码,搞清楚它有哪些对象,这些对象又有什么属性和方法,那么这个库就基本上难不住你了。