尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
python把pdf中所有页面导出为图片
环境创建conda create-npdf2imgpython3.11-yconda activate pdf2img pipinstallpymupdfpymupdf下载地址https://mirrors.aliyun.com/pypi/simple/库名/注意库名必须是_下划线而不是-横线安装pipinstall路径.whl具体的库networkx-3.6.1 packaging-26.3 protobuf-7.36.2-cp310-abi3-win_amd64.whl flatbuffers-25.12.19-py2.py3-none-any.whl pymupdf4llm-2.0-py3-none-any.whl tabulate-0.10.0-py3-none-any.whl psutil-7.2.2-cp37-abi3-win_amd64.whl pymupdf_layout-2.0-py3-none-any.whl pyyaml-6.0.3-cp311-cp311-win_amd64.whl numpy-2.4.6-cp311-cp311-win_amd64.whl onnxruntime-1.31.0-cp311-cp311-win_amd64.whl pymupdf-2.0-cp311-abi3-win_amd64.whl代码#!/usr/bin/env python3# -*- coding: utf-8 -*- 把 PDF 的每一页导出为图片。 依赖安装 pip install pymupdf 用法示例 python pdf2img.py input.pdf # 输出到 ./input_images/ python pdf2img.py input.pdf -o out_dir # 指定输出目录 python pdf2img.py input.pdf -f jpg -d 200 # 导出 jpg200 DPI python pdf2img.py input.pdf -r 1-5,8 # 只导出第 1~5 页和第 8 页 python pdf2img.py input.pdf -p password # 带密码的 PDF importargparseimportosimportsysimportpymupdf# PyMuPDFpip install pymupdfdefparse_pages(pages_str,total):把 1-5,8 这样的字符串解析成页索引列表0 基。ifnotpages_str:returnlist(range(total))idx[]forpartinpages_str.split(,):partpart.strip()ifnotpart:continueif-inpart:start,endpart.split(-,1)startint(start)ifstart.strip()else1endint(end)ifend.strip()elsetotal idx.extend(range(start-1,end))# 页码从 1 开始索引从 0 开始else:idx.append(int(part)-1)# 去重 过滤越界 保持原顺序seen,resultset(),[]foriinidx:if0itotalandinotinseen:seen.add(i)result.append(i)returnresultdefpdf2img(pdf_path,out_dirNone,fmtpng,dpi150,pagesNone,passwordNone,prefixNone):把 PDF 页面导出为图片返回生成的图片路径列表。ifnotos.path.isfile(pdf_path):raiseFileNotFoundError(f找不到 PDF 文件{pdf_path})fmtfmt.lower().lstrip(.)iffmtnotin(png,jpg,jpeg):raiseValueError(格式只支持 png / jpg)out_dirout_diroros.path.splitext(pdf_path)[0]_imagesos.makedirs(out_dir,exist_okTrue)prefixprefixoros.path.splitext(os.path.basename(pdf_path))[0]zoomdpi/72.0# PDF 默认 72 DPImatrixpymupdf.Matrix(zoom,zoom)outputs[]withpymupdf.open(pdf_path)asdoc:ifdoc.needs_passandnotpassword:raisePermissionError(该 PDF 已加密请用 -p 提供密码)ifpassword:doc.authenticate(password)page_idsparse_pages(pages,doc.page_count)widthlen(str(len(page_ids)))forn,iinenumerate(page_ids,start1):pagedoc.load_page(i)# alphaFalse输出不透明背景否则透明区域可能变黑pixpage.get_pixmap(matrixmatrix,alphaFalse)namef{prefix}_{n:0{width}d}.{fmt}pathos.path.join(out_dir,name)pix.save(path)outputs.append(path)print(f[{n}/{len(page_ids)}] 第{i1}页 -{path}f({pix.width}x{pix.height}))print(f\n完成共导出{len(outputs)}张图片到{os.path.abspath(out_dir)})returnoutputsdefmain():parserargparse.ArgumentParser(description将 PDF 的每一页导出为图片)parser.add_argument(pdf,helpPDF 文件路径)parser.add_argument(-o,--output,help输出目录默认为 PDF 同名的 _images 文件夹)parser.add_argument(-f,--format,defaultpng,help图片格式png 或 jpg默认 png)parser.add_argument(-d,--dpi,typeint,default150,help分辨率默认 150 DPI)parser.add_argument(-r,--pages,help页码范围如 1-5,8默认全部)parser.add_argument(-p,--password,helpPDF 打开密码)parser.add_argument(--prefix,help输出文件名前缀默认取 PDF 文件名)argsparser.parse_args()try:pdf2img(args.pdf,args.output,args.format,args.dpi,args.pages,args.password,args.prefix)exceptExceptionase:print(f出错{e},filesys.stderr)sys.exit(1)if__name____main__:main()代码运行命令python pdf2img.py input.pdf# 输出到 ./input_images/python pdf2img.py input.pdf-oout_dir# 指定输出目录python pdf2img.py input.pdf-fjpg-d200# 导出 jpg200 DPIpython pdf2img.py input.pdf-r1-5,8# 只导出第 1~5 页和第 8 页python pdf2img.py input.pdf-ppassword# 带密码的 PDF
RELATED

相关推荐

Rime 输入法怎么挑:5 分钟看懂 awesome-rime 输入方案与配置列表

Rime 输入法怎么挑:5 分钟看懂 awesome-rime 输入方案与配置列表

Rime 输入法怎么挑:5 分钟看懂 awesome-rime 输入方案与配置列表 【免费下载链接】awesome-rime A curated list of Rime IME schemata and configs | Rime 輸入方案和配置列表 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-rime 拼音打字总是…

📅 2026/10/23 6:26:50
freehire 按用户 LLM 花费归因:`internal/ai/llmkey` 的密钥铸造、解析与回收机制

freehire 按用户 LLM 花费归因:`internal/ai/llmkey` 的密钥铸造、解析与回收机制

【免费下载链接】freehire freehire — the open-source search engine for job seekers 项目地址: https://gitcode.com/GitHub_Trending/fr/freehire 点击查看 免费下载 导读 freehire 的每一次模型调用最终都会落到某个 LLM 网关的凭证上。要让"谁花了多少…

📅 2026/10/23 6:26:50
YimMenu 完整指南:GTA5 防崩溃菜单的功能、编译与 Lua 扩展教程

YimMenu 完整指南:GTA5 防崩溃菜单的功能、编译与 Lua 扩展教程

YimMenu 完整指南:GTA5 防崩溃菜单的功能、编译与 Lua 扩展教程 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trendin…

📅 2026/10/23 6:26:50
MORE NEWS

更多资讯

📰

嵌入式驱动开发实战:从寄存器操作到DMA调试的完整经验总结

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

时序路径分析核心框架:从STA原理到违例修复实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

智能制造生产优化的5大落地难点:数据断层、多目标冲突与人机协同

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

采样间隔1秒一天86KB?GOT2000数据记录容量配置全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Loop 开源窗口管理工具:鼠标手势与快捷键提升 macOS 多窗口效率

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

如何降低AI检测率?让AI写作更有“人味儿”的实用技巧

“怎么降低AI检测率”这个话题,最近几个月在内容创作者圈子里几乎成了默认的刚需。无论是写自媒体文章、做短视频文案,还是提交一份项目总结报告,很多人发现:自己明明花了心思写东西,怎么一放进AI检测软件里就显示“疑…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬