资讯动态

python把pdf中所有页面导出为图片

发布时间:2026/10/23 6:26:48 来源:尧图企业网站定制
环境创建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

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑