当前位置:首页>python>百页PDF转图片?Python脚本甩脸式一键搞定

百页PDF转图片?Python脚本甩脸式一键搞定

  • 2026-09-26 10:24:39
百页PDF转图片?Python脚本甩脸式一键搞定

领导甩来百页PDF,让每页截成图塞PPT?还搁那一页页点截图?快拉倒吧!咱敲代码的手,可不是当人肉截图机的!今天直接甩个 Python 脚本,拖个文件/文件夹,几秒钟全给你转成图,JPG/PNG随便挑,清晰度自己调,全程本地跑不泄密,以后这破活再也别想耗我一分钟!回复  Py脚本  获取完整可跑代码

一、需求说透,别整虚的

  1. 就比如手里有这玩意儿:产品手册.pdf (188页)
  2. 咱要的结果特简单:把每一页拆成单独图片,整整齐齐存好,还能批量干文件夹里所有 PDF,不用一个个磨叽,最终就是这效果:
产品手册/├── 第1页.jpg├── 第2页.jpg├── 第3页.jpg└── ... 一直到188页

二、代码直接甩,复制就能跑,别磨叽

import osimport sysfrom pdf2image import convert_from_path# 直接拖PDF文件/文件夹过来,不用手输路径,省得打错path = input('把PDF文件/文件夹拖进来:').strip().strip('"')# 路径不对直接歇菜,不跟你瞎耗if not os.path.exists(path):print('❌ 路径都找不到,搁这逗我呢?')    input('按回车滚蛋...')    sys.exit()# 自动识别单个PDF/文件夹里的PDF,全给你扒拉出来pdf_files = []if os.path.isfile(path) and path.lower().endswith('.pdf'):    pdf_files = [path]    base_dir = os.path.dirname(path)elif os.path.isdir(path):# 只挑PDF文件,其他杂七杂八的一概不理    pdf_files = [os.path.join(path, f) for f in os.listdir(path) if f.lower().endswith('.pdf')]    base_dir = pathelse:print('❌ 只认PDF文件/装PDF的文件夹,别瞎拖!')    input('按回车滚蛋...')    sys.exit()# 没找着PDF直接撂挑子,白忙活谁干if not pdf_files:print('❌ 文件夹里连根PDF毛都没有,玩个锤子?')    input('按回车滚蛋...')    sys.exit()print(f'找着 {len(pdf_files)} 个PDF,开干!')# 选图片格式,按需来,别纠结print('\n图片格式选一个:')print('1. JPG(体积小,日常插PPT、发消息够用)')print('2. PNG(无损高清,就是文件稍大,打印用合适)')fmt_choice = input('默认选1,直接回车就行:').strip() or '1'img_format = 'jpg'if fmt_choice == '1'else'png'# 调清晰度,DPI越大越清,文件也越大,别瞎拉满dpi = input('输入DPI(默认200,打印选300+):').strip()dpi = int(dpi) if dpi else 200# 替换成你自己的poppler路径(国内下载解压后的bin目录)POPPLER_PATH = r'C:\poppler\Library\bin'# 挨个处理PDF,一个都不落for pdf_idx, pdf_path in enumerate(pdf_files, 1):# 取PDF名字,建个同名文件夹存图片,省得乱    pdf_name = os.path.splitext(os.path.basename(pdf_path))[0]    out_dir = os.path.join(base_dir, pdf_name)    os.makedirs(out_dir, exist_ok=True)print(f'正在干:{os.path.basename(pdf_path)} ({pdf_idx}/{len(pdf_files)})')    try:# 核心操作:把PDF转成图片列表,指定poppler路径避免报错        images = convert_from_path(pdf_path, dpi=dpi, poppler_path=POPPLER_PATH)        total = len(images)# 逐页保存,标清页码,一眼能瞅见for i, img in enumerate(images, 1):            img_path = os.path.join(out_dir, f'第{i}页.{img_format}')# 修复JPG格式报错:PIL保存JPG需用JPEG标识            save_format = 'JPEG'if img_format == 'jpg'else img_format.upper()            img.save(img_path, save_format)# 同一行刷新进度,不刷屏,看着清爽print(f'  ✓ 第{i}页搞定', end='\r')# 换行会清掉上一行的进度,单独打完成提示print(f'  ✓ 完事!共{total}页,全存这了:{out_dir}')    except Exception as e:# 哪步出问题直接说,不藏着掖着print(f'  ✗ 这玩意栽了,原因:{e}')# 全部干完,直接给结果,不磨叽print(f'\n✅ 所有活全搞定!图片全在各自PDF的同名文件夹里,直接拿去用!')input('按回车收工...')

三、核心代码唠明白,别光抄不理解

咱不是要背代码,关键处得知道咋回事,改起来才不慌:

1. 核心依赖行:from pdf2image import convert_from_path 

这行是灵魂!本质是调用poppler工具,把PDF拆成图片,不用管底层咋跑,咱只管拿来用,少了这行啥都白搭。

2. 自动识别PDF行:pdf_files = [os.path.join(path, f) for f in os.listdir(path) if f.lower().endswith('.pdf')]

遍历文件夹里所有文件,只挑后缀是.pdf的,不管大写小写,其他杂文件一概过滤,省得手动挑。

3. 自动建文件夹行:os.makedirs(out_dir, exist_ok=True)

按PDF文件名字建文件夹,exist_ok=True意思是文件夹已经存在也不报错,不用你手动点“新建文件夹”,避免重复操作。

4. 核心转换行:images = convert_from_path(pdf_path, dpi=dpi) 

把PDF转成图片列表,dpi是清晰度参数,传多少就按多少清晰度转,这行决定图片清楚不清楚。

5. 逐页保存行:img.save(img_path, img_format.upper())

把每一页图片存到指定路径,upper()是把jpg/png转成JPG/PNG,适配图片保存的格式,少了这步可能存不了。

6. 进度刷新行:print(f' ✓ 第{i}页搞定', end='\r') 

end='\r'让打印内容在同一行刷新,不会满屏都是 “第1页搞定”“第2页搞定”,看着清爽,查进度一眼就见。

四、装依赖,两步搞定,别卡这

这脚本就靠俩东西,少一个都跑不起来,一分钟搞定:

1. 装Python依赖库

打开命令行(CMD),直接敲:

pip install pdf2image

2. 装poppler工具(核心!漏了必报错)

  • Windows:GitHub下poppler稳定版,解压后把bin文件夹加到系统环境变量 PATH,不会加就搜「Windows 添加环境变量」,跟着点就行;
  • Mac:终端敲brew install poppler(先装 Homebrew);
  • Linux:终端敲sudo apt-get install poppler-utils。

嫌配环境变量麻烦?直接写死poppler路径:

- images = convert_from_path(pdf_path, dpi=dpi, poppler_path=r'C:\你自己的路径\poppler\bin')

五、踩过的坑,全撂这,别掉进去

都是我踩过的坑,可直接绕开,省得瞎折腾:

  1. poppler装不上/报错:别下小网站的资源,GitHub下官方版,Windows 别忘配环境变量,或者直接写死路径,最省心;
  2. 大PDF卡崩/内存炸了:几百页PDF别一次性转进内存,改这行:
images = convert_from_path(pdf_path, dpi=dpi, fmt='jpg', output_folder=out_dir)

直接存文件不占内存,多大 PDF 都扛得住;

  1. 中文文件名乱码:PDF名带中文没事,但poppler路径别带中文,全改英文,一劳永逸;
  2. 图片顺序反了:跟脚本无关,是PDF本身页码乱了,先整好PDF再跑;
  3. 转图慢:别把DPI拉满,日常200足够,打印再调300,DPI调低,速度翻倍;
  4. 个别PDF转不了:要么是加密了先解密,要么是文件损坏,重新传,脚本不背锅。哈哈

六、拓展玩法,别只会套模板

改两行代码,适配更多需求:

  1. 只转指定页码:images = convert_from_path(pdf_path, dpi=dpi, first_page=5, last_page=20),只转5-20页,省时间;
  2. 做缩略图:DPI调72,几秒转完百页PDF,预览超方便;
  3. 加水印转图:先给PDF加水印,再用这脚本转,版权直接锁死。

七、今儿个就练这个,别光看不动手

找个10页左右的小PDF,复制(下载)脚本跑一遍,保证一次成。卡poppler安装就搜“系统版本+poppler安装”,新手都能搞定,代码跑一遍比看十遍都管用!

八、下期整啥?

评论区吼一声,咱下期直接盘:

  • 批量提取Word里的所有图片,不用手动复制;
  • 自动给照片按拍摄日期重命名;
  • 文件夹按大小/类型自动归类。 

总结

  1. 核心代码关键在convert_from_path转换PDF、os.makedirs自动建文件夹、逐页保存+进度刷新这几步,理解了就能灵活改;
  2. 装依赖别漏poppler,Windows要么配环境变量要么写死路径,避免报错;
  3. 大PDF转图改参数省内存,中文路径只避poppler,其他随便用,踩坑直接绕开不用慌。

回复“Py脚本”直接拿完整代码,双击即可跑,别再瞎写磨洋工!


精选:
自动合并(汇总)几十张Excel表格
批量提取Word文件中的图片
秒拆分几万行Excel表格数据
批量提取PDF文件中的文字
批量提取PDF文件中的图片
批量Word转PDF
批量改名几百个文件
合并PDF别再傻傻充会员了
图片转PDF还要花钱?

最新文章

随机文章