Python编程之PDF转图片的三种实现方法详解

 更新时间:2026年03月19日 09:33:43   作者:倔强老吕  
这篇文章主要为大家详细介绍了Python中PDF转图片的三种实现方法,主要是pdf2image,PyMuPDF和wand,文中的示例代码讲解详细,有需要的小伙伴可以了解下

有多种Python库可以实现将PDF文件转换为图片,下面介绍几种常用的方法:

方法1:使用pdf2image库

from pdf2image import convert_from_path
import os

def pdf_to_images(pdf_path, output_folder):
    # 创建输出文件夹
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 转换PDF为图片
    images = convert_from_path(pdf_path)
    
    # 保存图片
    for i, image in enumerate(images):
        image.save(f"{output_folder}/page_{i+1}.jpg", "JPEG")
    
    print(f"转换完成,共生成 {len(images)} 张图片")

# 使用示例
pdf_path = "input.pdf"  # 输入PDF文件路径
output_folder = "output_images"  # 输出图片文件夹
pdf_to_images(pdf_path, output_folder)

安装依赖

pip install pdf2image

还需要安装poppler:

Windows: 下载poppler并添加bin目录到PATH

Mac: brew install poppler

Linux: sudo apt-get install poppler-utils

方法2:使用PyMuPDF(fitz)库

import fitz  # PyMuPDF
import os

def pdf_to_images(pdf_path, output_folder, zoom=3):
    # 创建输出文件夹
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 打开PDF文件
    pdf_document = fitz.open(pdf_path)
    
    # 逐页转换为图片
    for page_num in range(len(pdf_document)):
        page = pdf_document.load_page(page_num)
        mat = fitz.Matrix(zoom, zoom)  # 设置缩放因子提高分辨率
        pix = page.get_pixmap(matrix=mat)
        output_path = f"{output_folder}/page_{page_num+1}.png"
        pix.save(output_path)
    
    print(f"转换完成,共生成 {len(pdf_document)} 张图片")
    pdf_document.close()

# 使用示例
pdf_path = "input.pdf"
output_folder = "output_images"
pdf_to_images(pdf_path, output_folder)

安装依赖

pip install pymupdf

方法3:使用wand(ImageMagick)库

from wand.image import Image
import os

def pdf_to_images(pdf_path, output_folder, resolution=300):
    # 创建输出文件夹
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 转换PDF为图片
    with Image(filename=pdf_path, resolution=resolution) as img:
        img.compression_quality = 99
        img.save(filename=f"{output_folder}/page.jpg")  # 会自动生成多个文件
    
    # 统计生成的文件数量
    image_count = len([f for f in os.listdir(output_folder) if f.endswith('.jpg')])
    print(f"转换完成,共生成 {image_count} 张图片")

# 使用示例
pdf_path = "input.pdf"
output_folder = "output_images"
pdf_to_images(pdf_path, output_folder)

安装依赖

pip install wand

还需要安装ImageMagick:

  • Windows: 下载安装ImageMagick
  • Mac: brew install imagemagick
  • Linux: sudo apt-get install imagemagick

PyMuPDF

PyMuPDF(也称为 fitz)是一个高性能的 Python PDF 处理库,基于 MuPDF 引擎,支持 PDF 转图片、文本提取、页面操作 等功能。相比其他库,它的速度更快,且不依赖外部工具(如 popplerImageMagick)。

1. 安装

pip install pymupdf -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 核心功能示例

PDF 转图片

import fitz  # PyMuPDF
import os

def pdf_to_images(pdf_path, output_folder, zoom=2, fmt="png"):
    """将 PDF 每页转为图片
    Args:
        pdf_path: PDF 文件路径
        output_folder: 输出文件夹
        zoom: 缩放因子(提高分辨率)
        fmt: 图片格式(png/jpg)
    """
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    doc = fitz.open(pdf_path)
    for page_num in range(len(doc)):
        page = doc.load_page(page_num)
        mat = fitz.Matrix(zoom, zoom)  # 提高分辨率
        pix = page.get_pixmap(matrix=mat)
        output_path = f"{output_folder}/page_{page_num+1}.{fmt}"
        pix.save(output_path)
    
    print(f"转换完成,共生成 {len(doc)} 张图片")

# 使用示例
pdf_to_images("input.pdf", "output_images", zoom=3, fmt="jpg")

参数说明

  • zoom=2:放大 2 倍(默认 72 DPI,zoom=3 约等于 300 DPI)。
  • fmt="png":输出格式(支持 png/jpg/ppm/tga 等)。

提取 PDF 文本

doc = fitz.open("input.pdf")
text = ""
for page in doc:
    text += page.get_text()  # 提取纯文本
print(text)

高级选项

  • page.get_text("blocks"):按文本块提取(带坐标和格式)。
  • page.get_text("words"):按单词提取。

合并/拆分 PDF

# 合并 PDF
doc1 = fitz.open("file1.pdf")
doc2 = fitz.open("file2.pdf")
doc1.insert_pdf(doc2)  # 将 doc2 插入到 doc1 末尾
doc1.save("merged.pdf")

# 拆分 PDF(提取指定页)
doc = fitz.open("input.pdf")
new_doc = fitz.open()
new_doc.insert_pdf(doc, from_page=0, to_page=2)  # 提取前 3 页
new_doc.save("split.pdf")

添加水印或注释

doc = fitz.open("input.pdf")
page = doc.load_page(0)

# 添加文本水印
page.insert_text(
    point=(50, 50),  # 坐标 (x,y)
    text="Watermark",
    fontsize=20,
    color=(1, 0, 0),  # RGB 颜色(0-1 范围)
    rotate=45  # 旋转角度
)

# 添加矩形标注
page.draw_rect(
    rect=fitz.Rect(50, 50, 200, 100),  # 矩形区域 (x1,y1,x2,y2)
    color=(0, 1, 0),
    width=2  # 边框宽度
)

doc.save("output.pdf")

3. 常见问题解决

问题 1:ModuleNotFoundError: No module named 'fitz'

原因PyMuPDF 的导入名是 fitz,但包名是 pymupdf

解决:确保安装正确:

pip uninstall fitz  # 如果误装了旧版
pip install pymupdf

问题 2:图片分辨率低

解决:调整 zoom 参数(如 zoom=3)或直接设置 DPI:

mat = fitz.Matrix(300/72, 300/72)  # 300 DPI
pix = page.get_pixmap(matrix=mat)

问题 3:处理加密 PDF

doc = fitz.open("encrypted.pdf", password="your_password")

4. 小结

推荐场景

  • 需要高性能 PDF 转图片。
  • 避免安装外部依赖(如 popplerImageMagick)。
  • 需要高级功能(文本提取、PDF 编辑等)。

优势

  • 纯 Python 实现,跨平台。
  • 支持加密 PDF、高分辨率导出、精确文本提取。

性能对比

依赖项速度功能丰富度
PyMuPDF极快★★★★★
pdf2imagepoppler★★★☆☆
wandImageMagick★★★★☆

注意事项

  • 对于多页PDF,每种方法都会生成多个图片文件
  • 可以通过调整参数(如分辨率、缩放因子)来控制图片质量
  • 大PDF文件转换可能需要较多内存
  • 输出格式可以是JPG、PNG等常见图片格式

选择哪种方法取决于你的具体需求和环境配置。pdf2image通常最简单易用,PyMuPDF性能较好,wand则提供了更多图像处理选项。

以上就是Python编程之PDF转图片的三种实现方法详解的详细内容,更多关于Python PDF转图的资料请关注脚本之家其它相关文章!

相关文章

  • Pandas库中iloc[]函数的使用方法

    Pandas库中iloc[]函数的使用方法

    在数据分析过程中,很多时候需要从数据表中提取出相应的数据,而这么做的前提是需要先“索引”出这一部分数据,下面这篇文章主要给大家介绍了关于Pandas库中iloc[]函数的使用方法,需要的朋友可以参考下
    2023-01-01
  • Python学习笔记_数据排序方法

    Python学习笔记_数据排序方法

    Python对数据排序有两种方法:下面我们来简单分析下
    2014-05-05
  • 使用python+requests+pytest实现接口自动化

    使用python+requests+pytest实现接口自动化

    这篇文章主要介绍了使用python+requests+pytest实现接口自动化,在当前互联网产品迭代频繁的背景下,回归测试的时间越来越少,但接口自动化测试因其实现简单、维护成本低,容易提高覆盖率等特点,越来越受重视,需要的朋友可以参考下
    2023-08-08
  • Python实现数据可视化大屏布局的示例详解

    Python实现数据可视化大屏布局的示例详解

    数据可视化大屏展示需求无疑是对数据分析结果最好的诠释,能够使得别人能够轻松的就理解我们的数据意图。本文将通过pyecharts模块来实现,感兴趣的可以了解一下
    2022-11-11
  • 浅谈Python中的闭包

    浅谈Python中的闭包

    简单说,闭包就是根据不同的配置信息得到不同的结果。再来看看专业的解释:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。
    2015-07-07
  • Python基于DES算法加密解密实例

    Python基于DES算法加密解密实例

    这篇文章主要介绍了Python基于DES算法加密解密实现方法,以实例形式分析了DES算法实现加密解密的相关技巧,需要的朋友可以参考下
    2015-06-06
  • Django Rest Framework构建API的实现示例

    Django Rest Framework构建API的实现示例

    本文主要介绍了Django Rest Framework构建API的实现示例,包含环境设置、数据序列化、视图与路由配置、安全性和权限设置、以及测试和文档生成这几个步骤,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • Python+matplotlib实现循环作图的方法详解

    Python+matplotlib实现循环作图的方法详解

    这篇文章主要为大家介绍了Python如何利用matplotlib实现循环作图的,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习学习
    2022-06-06
  • 使用浏览器访问python写的服务器程序

    使用浏览器访问python写的服务器程序

    这篇文章主要介绍了用浏览器访问python写的服务器程序,本文通过实例代码,需要的朋友可以参考下
    2019-10-10
  • Python pywifi ERROR Open handle failed问题及解决

    Python pywifi ERROR Open handle fai

    这篇文章主要介绍了Python pywifi ERROR Open handle failed问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论