在这篇技术博客中,我们将详细介绍如何使用Python将PDF文件转换成图片。这个功能在处理扫描文档或者需要将PDF内容以图像形式展示的场景中非常有用。我们将使用fitz
库(也就是PyMuPDF),以及glob
和os
模块来实现这个功能。
📝 准备工作
首先,确保你已经安装了fitz
库(PyMuPDF)。如果没有安装,可以通过以下命令来安装:
pip install PyMuPDF
安装完成之后,我们就可以开始编写代码了。
🚀 代码解析
以下是我们的脚本,我们将逐步解释每个部分的作用:
# filename: 6.将PDF文件转存为图片.py
print("PDF转图片开始运行!")
print("本软件由微信 Jimmie_ok 提供,如有问题请联系微信! 可定制开发指定功能软件!")
# 导入所需模块
import fitz # PyMuPDF库,用于处理PDF文件和图片转换
import glob # 用于查找符合特定规则的文件路径名
import os # 用于处理文件和目录
# 获取当前工作目录的路径
work_path = os.getcwd()
# 定义存放生成的图片的文件夹路径
image_path = work_path + "\\images\\"
# 从用户处获取PDF文件所在的路径
PDF_path = input("请输入PDF文件所在的路径:")
# 使用glob模块获取指定路径下的所有pdf文件的文件名
PDFfiles = glob.glob(PDF_path + "\\*.pdf")
# 遍历所有PDF文件
for PDFfile in PDFfiles:
# 使用fitz模块打开PDF文件
PDFdoc = fitz.open(PDFfile)
# 遍历PDF文件的每一页
for pg in range(PDFdoc.pageCount):
# 从PDF文件名中提取出文件名(不包含扩展名),用作新建的文件夹名
folder_name = PDFfile.split("\\")[-1].split(".")[0]
# 获取当前页
page = PDFdoc[pg]
# 设置旋转角度,这里设为0,即不旋转
rotate = int(0)
# 设置图片相对于PDF文件在X轴和Y轴上的缩放比例,这里设为3
zoom_x = 3
zoom_y = 3
# 创建一个Matrix对象,用于后续的图片生成
mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
# 获取当前页的Pixmap对象,这是生成图片的关键步骤
pix = page.getPixmap(matrix=mat, alpha=False)
# 检查目标文件夹是否存在,如果不存在则创建
if not os.path.exists(image_path + folder_name):
os.makedirs(image_path + folder_name)
# 将Pixmap对象保存为PNG格式的图片,图片名为页码
pix.writePNG(image_path + folder_name + "\\{}.png".format(str(pg + 1)))
# 所有PDF文件处理完毕,打印完成信息
print("转换完成!")
print("转换后的图片保存在以下文件夹内:")
print(image_path)
📂 文件和目录处理
我们首先导入必要的模块,并获取当前工作目录的路径。接着,我们定义了一个用于存放生成的图片的文件夹路径,并通过用户输入获取PDF文件所在的路径。
🔍 找到所有PDF
使用glob
库,我们可以轻松地找到给定路径下的所有PDF文件。
🔄 遍历和转换
对于每个找到的PDF文件,我们使用fitz.open
来打开它。然后,我们遍历每一页,创建一个fitz.Matrix
对象来定义图片的缩放比例和旋转角度,并使用getPixmap
方法将每一页转换成一个图片。
📁 文件夹管理
在保存图片之前,我们检查是否已经存在一个以PDF文件名命名的文件夹,如果不存在,我们就创建一个。这样做可以确保我们的输出有序且易于管理。
🖼️ 保存图片
最后,我们使用writePNG
方法将转换得到的图片以PNG格式保存到相应的文件夹中。
🎉 完成打印
脚本运行结束后,我们会打印出完成信息,并告知用户图片保存的位置。
通过以上步骤,我们就可以轻松地将PDF文件转换为图片了。这个脚本可以处理多页PDF文件,并且会为每个PDF文件创建一个单独的文件夹来存放输出的图片。
以上代码有疑问的可以联系作者一起交流学习