Python办公自动化:利用Python批量将PDF转换为图片文件

Python办公自动化:利用Python批量将PDF转换为图片文件
前言在日常办公中我们经常遇到这样的场景产品说明书是PDF格式需要提取里面的图片做成素材库论文、简历需要转成图片格式以便预览或上传。手动一个个打开PDF、截图、保存几十个文件下来手都点麻了这时候Python办公自动化就能发挥巨大作用。今天我就带大家用PyMuPDF也就是fitz库写一个批量转换脚本一键将文件夹内所有PDF转为高清PNG图片。而且我会把我在实际踩坑中遇到的新旧版本API不兼容问题全部列出来供大家参考目录一、安装依赖库1.1 完整代码和实现原理1.2路径获取二、 代码逐段精讲2.1 动态获取路径不写死盘符2. 2 控制图片清晰度DPI2.3 自动创建分类文件夹三、⚠️ 重点避坑指南四、 总结一、安装依赖库只需要安装一个库——PyMuPDF它内部包含fitz模块pip install PyMuPDF -i https://pypi.tuna.tsinghua.edu.cn/simple1.1 完整代码和实现原理创建一个Python文件比如pdf_to_image.py将以下代码完整复制进去# -*- coding: utf-8 -*- Python批量将PDF转为图片文件 # 安装所需模块建议安装最新版 # pip install PyMuPDF -i https://pypi.tuna.tsinghua.edu.cn/simple import os import fitz def pyMuPDF_fitz(pdfPath, imagePath): 转换主函数 pdfDoc fitz.open(pdfPath) for pg in range(len(pdfDoc)): # 兼容新旧版 page pdfDoc[pg] rotate int(0) zoom_x 1.33333333 zoom_y 1.33333333 # 新版方法名为 prerotate小写 mat fitz.Matrix(zoom_x, zoom_y).prerotate(rotate) # 新版方法名为 get_pixmap下划线 pix page.get_pixmap(matrixmat, alphaFalse) if not os.path.exists(imagePath): os.makedirs(imagePath) # 生成图片路径 img_path os.path.join(imagePath, images_%s.png % pg) # ---------- 兼容 writePNG 和 save ---------- if hasattr(pix, writePNG): # 旧版 pix.writePNG(img_path) else: # 新版 pix.save(img_path) # save 自动根据扩展名保存为 PNG print(转换成功 imagePath) if __name__ __main__: # 动态获取脚本所在目录 base_dir os.path.dirname(os.path.abspath(__file__)) pdfpath base_dir imgpath base_dir files os.listdir(pdfpath) pptfiles [f for f in files if f.lower().endswith(.pdf)] for pptfile in pptfiles: pdffilepath os.path.join(pdfpath, pptfile) # 为每个 PDF 建立独立子文件夹 minimgpath os.path.join(imgpath, os.path.splitext(pptfile)[0]) try: pyMuPDF_fitz(pdffilepath, minimgpath) except Exception as e: print(f处理文件 {pptfile} 时出错{e})1.2路径获取需要注意的是PDF的存放路径必须是在你文件代码的同一路径下。1.3使用动态路径推荐不必写死绝对路径让脚本自动定位到当前文件所在目录然后拼接子目录或直接使用当前目录。import os import sys # 获取当前脚本所在目录 script_dir os.path.dirname(os.path.abspath(__file__)) # 如果你把PDF放在脚本所在的同一个文件夹 pdfpath script_dir imgpath script_dir # 或新建子目录如 os.path.join(script_dir, output)二、 代码逐段精讲2.1 动态获取路径不写死盘符base_dir os.path.dirname(os.path.abspath(__file__))这行代码会自动获取当前脚本所在的文件夹路径。好处是你把脚本和PDF放在任意目录它都能自动识别完全不需要手动修改代码里的路径。2. 2 控制图片清晰度DPIzoom_x 1.33333333 zoom_y 1.33333333这个缩放系数决定了输出图片的分辨率。1.333倍大约相当于144 DPI默认是 96 DPI既清晰又不会文件太大。如果你需要超高清比如印刷用可以改成2或3。2.3 自动创建分类文件夹minimgpath os.path.join(imgpath, os.path.splitext(pdf_file)[0])os.path.splitext(pdf_file)[0]去掉.pdf后缀得到文件名。每个PDF的图片会保存在以PDF文件名命名的子文件夹里防止图片混在一起。三、⚠️ 重点避坑指南我在写这个脚本时遇到了好几个报错都是PyMuPDF 新旧版本 API 不兼容导致的。下面我把这些坑全部列出来帮你节省大量时间报错信息产生原因解决方案Matrix object has no attribute preRotate旧版方法名是驼峰preRotate新版改为全小写prerotate改为.prerotate(rotate)Page object has no attribute getPixmap旧版方法名getPixmap新版改为下划线get_pixmap改为.get_pixmap()Pixmap object has no attribute writePNG旧版用writePNG()保存图片新版统一为save()用hasattr判断优先用writePNG否则用save特别是第三个坑我在代码中做了全版本兼容处理if hasattr(pix, writePNG): pix.writePNG(img_path) else: pix.save(img_path)这样一来不管读者用的是老项目还是新环境复制代码就能跑完全不用担心版本报错四、 总结通过不到50行Python代码我们实现了一个全自动、全版本兼容的PDF批量转图片工具。它✅ 自动识别当前目录所有PDF✅ 高清输出可自定义DPI✅ 按PDF文件名自动分类保存✅ 兼容PyMuPDF所有版本无需操心报错办公自动化的魅力就在于此——把重复、枯燥的工作交给代码把时间留给更有价值的事情。希望这篇文章对你有帮助如果你在运行过程中遇到任何问题欢迎在评论区留言我会尽力协助。如果觉得有用点个赞和收藏再走吧~