很遗憾,pypdf2库主要是用来处理PDF文档页面的,对于文档内容它却基本上不涉及,所以也没有提供提取图片的相关方法,想要提取图片,又只能另辟蹊径了。
巧了,上一小节使用到的pymupdf库就有提取图片的功能,那么还是用它来处理吧,如果想学习更多的库,可以尝试找一下还有哪些库也可以提取PDF文件的图片,自己动手尝试,实现提取图片的需求。
使用pymupdf提取一个PDF文档的全部图片的参考代码如下:
import os
import fitz
pdf = fitz.open("./pdf_ files/练习文档.pdf")
save_path = "./pdf_images"
for index,page in enumerate(pdf.pages()):
print(f"正确提取第{index}页")
for image in page.get_images():
xref = image[0]
pix = fitz.Pixmap(pdf,xref)
if not os.path.exists(save_path):
os.mkdir(save_path)
path = os.path.join(save_path,f"page{index}_{xref}.png")
pix.save(path)
提取图片的过程也很清晰,首先打开一个PDF文档,遍历它的所有页面,页面对象有一个get_images()方法可以获取到所有图片的信息,返回的是一个元组套元组,即一个元组代表一张图片的信息。
图片信息里最主要的是图片的xref,其实xref就是一个数字,表示图片的编号,我们可以根据文档对象和xref调用f i tz.Pixmap()获取到一个Pixmap对象,即一张图片,最后调用Pixmap对象的save()方法把它保存到指定路径即可。Pixmap的save()方法的第一个参数是路径,第二个参数是图片格式,支持的格式有png(默认)、pnm、tga、psd、ps等,不过我们一般采用默认的png格式就行了。