Python实现将pdf文档保存成图片格式

 更新时间:2024年10月31日 09:09:02   作者:IT小瓯  
有时候我们会碰到只支持图片上传的场景,如何编程快速将pdf转成图片呢?可以使用 Python 的 pdf2image 库仅10行代码就能将 PDF 文档保存为图片格式,所以本文给大家介绍了如何使用Python实现将pdf文档保存成图片格式,需要的朋友可以参考下

有时候我们会碰到只支持图片上传的场景,如何编程快速将pdf转成图片呢?

可以使用 Python 的 pdf2image 库仅10行代码就能将 PDF 文档保存为图片格式。如果 PDF 文档包含多页,则每一页可以保存为单独的图片。以下是实现该功能的步骤:

步骤:

安装所需的库:

可以使用以下命令来安装:

  • pdf2image: 用于将 PDF 转换为图片。
  • poppler-utils(非 Python 包,需要系统安装):用于支持 PDF 的渲染,pdf2image 依赖它。
pip install pdf2image

Poppler 安装(根据系统不同):

  • 在 Windows 上,你可以下载 Poppler for Windows 并将其路径添加到系统环境变量中。
  • 在 Linux 上,通常可以通过包管理器安装:
sudo apt-get install poppler-utils
  • Python 代码:

    • 下面的代码示例可以将多页的 PDF 保存为多张图片,每页生成一个独立的 PNG 文件。
from pdf2image import convert_from_path

# PDF 文件路径
pdf_path = 'your_pdf_file_path.pdf'

# 将 PDF 转换为图片
images = convert_from_path(pdf_path, dpi=150)

# 保存每一页为单独的图片
for i, image in enumerate(images):
    output_path = f'page_{i + 1}.png'
    image.save(output_path, 'PNG')

    print(f'Saved: {output_path}')

代码解析:

  1. from pdf2image import convert_from_path

    • 从 pdf2image 库中导入 convert_from_path 函数,用于将 PDF 文件转换为图片。
  2. images = convert_from_path(pdf_path, dpi=150)

    • 将 PDF 文件转换为图片对象列表。dpi 参数用于设置图片的质量(DPI 越高,质量越好)。
    • 每一页的图片都会被存储在 images 列表中。
  3. for i, image in enumerate(images)

    • 遍历 images 列表,逐页保存。
    • 使用 image.save(output_path, 'PNG') 保存每页为 PNG 格式。文件名由 output_path 指定,例如 page_1.pngpage_2.png 等。

示例输出:

  • 如果 PDF 文档有 5 页,代码会生成 5 张图片:
    • page_1.png
    • page_2.png
    • page_3.png
    • page_4.png
    • page_5.png

这样可以实现将 PDF 中的每一页保存为单独的图片,非常适合需要将 PDF 分割成多张图片的场景。

如上轻松生成了我想要的图片,把convert_pdf_to_image.py文件保留下来,这样就多了一个可以把pdf转成图片的工具了,编程就是如此快乐~

常见错误1:ImportError

ImportError: cannot import name 'convert_from_path' from partially initialized module 'pdf2image' (most likely due to a circular import) (C:\workspace\python\pdf2image\pdf2image.py)

这个错误通常是因为文件命名冲突引起的。如果你的脚本或者工作目录中有文件名叫 pdf2image.py,它会导致 Python 误认为你在导入的模块是你自己的文件,而不是实际的库模块。为了解决这个问题,可以按以下步骤进行修复:

解决步骤:

  1. 重命名本地文件

    • 确保你没有将你的脚本或工作目录中的任何文件命名为 pdf2image.py
    • 比如,将你的文件重命名为 convert_pdf_to_image.py 或者其他不包含 pdf2image 的名字。
  2. 检查.pyc 文件

    • 重命名后,也需要删除由 Python 生成的编译文件(.pyc 文件),这些文件可能仍在指向错误的模块版本。
    • 删除 __pycache__ 文件夹,或者直接删除目录中的 .pyc 文件。
  3. 重新运行代码

    • 重命名文件后,重新运行代码。

示例:

  • 如果你的文件原名是 pdf2image.py,请将其更改为其他名字,例如 convert_pdf_images.py
  • 删除当前目录下的 __pycache__ 文件夹:
    • 在 Windows 上,你可以手动删除文件夹。
    • 在 Linux 或 macOS 上,运行:
rm -rf __pycache__

修复后的代码:

确认文件重命名和缓存清除后,可以重新运行以下代码:

from pdf2image import convert_from_path

# PDF 文件路径
pdf_path = 'your_pdf_file_path.pdf'

# 将 PDF 转换为图片
images = convert_from_path(pdf_path, dpi=150)

# 保存每一页为单独的图片
for i, image in enumerate(images):
    output_path = f'page_{i + 1}.png'
    image.save(output_path, 'PNG')
    print(f'Saved: {output_path}')

额外建议:

  • 如果仍然遇到问题,可以尝试创建一个全新的 Python 虚拟环境来确保没有命名冲突,方法如下:
python -m venv new_env

然后激活虚拟环境,并安装依赖:

new_env\Scripts\activate  # Windows
source new_env/bin/activate  # Linux/macOS

pip install pdf2image

这应该可以解决 ImportError,避免模块命名冲突的问题。

常见错误2:pdf2image.exceptions.

pdf2image.exceptions.PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?

这个错误是因为 pdf2image 依赖于 Poppler,而 Poppler 没有安装或没有被正确添加到系统的 PATH 环境变量中。Poppler 是一个 PDF 渲染工具,pdf2image 使用它来处理 PDF 转换。下面是如何安装和配置 Poppler 的步骤:

在不同系统上安装 Poppler

1. Windows

  • 你需要下载 Poppler 的 Windows 版本并将其路径添加到系统环境变量中。
  • 下载地址:Poppler for Windows
  • 下载 ZIP 文件并解压到某个目录(例如:C:\poppler)。
  • 将解压目录的 bin 文件夹路径添加到系统的 PATH 环境变量中:
    • 按 Win + R,输入 sysdm.cpl,进入 系统属性
    • 在 高级 选项卡中,点击 环境变量
    • 在系统变量中找到 Path,点击 编辑
    • 添加 Poppler 的 bin 文件夹路径(例如:C:\poppler\bin)。
  • 验证 Poppler 是否安装成功:
    • 打开命令提示符,输入以下命令:
pdfinfo
    • 如果成功安装,你会看到 pdfinfo 的相关信息输出。

2. Linux

  • 大多数 Linux 发行版可以通过包管理器安装 Poppler:
sudo apt-get install poppler-utils

或者在基于 Fedora 的系统上:

sudo dnf install poppler-utils

3. macOS

  • 你可以使用 Homebrew 来安装 Poppler:

添加 Poppler 到 PATH

  • 如果在安装之后还是遇到错误,需要确保 Poppler 的可执行文件在系统的 PATH 环境变量中,具体步骤如下:
    • 在 Windows 上,确保 Poppler 安装目录的 bin 文件夹路径(如 C:\poppler\bin)已添加到环境变量中。
    • 在 Linux/macOS 上,安装时通常会自动添加到 PATH 中。

验证安装

  • 在终端中运行以下命令,确保 Poppler 工具可以被找到:
pdfinfo --version
    • 如果 Poppler 安装正确并且在 PATH 中,你将看到 Poppler 的版本信息。

再次运行代码

完成 Poppler 的安装和环境变量配置之后,可以重新运行你的 Python 代码:

from pdf2image import convert_from_path

# PDF 文件路径
pdf_path = 'your_pdf_file_path.pdf'

# 将 PDF 转换为图片
images = convert_from_path(pdf_path, dpi=150)

# 保存每一页为单独的图片
for i, image in enumerate(images):
    output_path = f'page_{i + 1}.png'
    image.save(output_path, 'PNG')
    print(f'Saved: {output_path}')

这个过程应该可以解决 PDFInfoNotInstalledError,确保 pdf2image 可以正常调用 Poppler 进行 PDF 转换。

以上就是Python实现将pdf文档保存成图片格式的详细内容,更多关于Python pdf保存成图片的资料请关注脚本之家其它相关文章!

相关文章

  • pytorch 调整某一维度数据顺序的方法

    pytorch 调整某一维度数据顺序的方法

    今天小编就为大家分享一篇pytorch 调整某一维度数据顺序的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python实现利用163邮箱远程关电脑脚本

    Python实现利用163邮箱远程关电脑脚本

    这篇文章主要为大家详细介绍了Python实现利用163邮箱远程关电脑脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • python中列表list切分的实现

    python中列表list切分的实现

    列表是Python中最常用的数据结构之一,经常需要对列表进行切分操作,本文主要介绍了python中列表list切分的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Python实现图片拼接的代码

    Python实现图片拼接的代码

    本文通过实例代码给大家介绍了python实现图片拼接的方法,非常不错,具有一定的参考借鉴借鉴价值,需要的朋友参考下吧
    2018-07-07
  • Python如何利用struct进行二进制文件或数据流

    Python如何利用struct进行二进制文件或数据流

    这篇文章主要介绍了Python如何利用struct进行二进制文件或数据流问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • AI对话中的“停止生成”与“重新回答”交互逻辑和实现方法

    AI对话中的“停止生成”与“重新回答”交互逻辑和实现方法

    在AI应用开发中,我们往往沉迷于Prompt的调优和RAG架构的设计,却忽视了交互层面的工程细节,实现“停止”与“重试”看似是前端的小功能,实则是对Web应用状态管理能力的考验,从商业价值角度看,这两个功能直接关联成本与体验
    2026-02-02
  • pandas中关于apply+lambda的应用

    pandas中关于apply+lambda的应用

    本文主要介绍了pandas中关于apply+lambda的应用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Python实现上下文管理器的示例代码

    Python实现上下文管理器的示例代码

    这篇文章主要为大家详细介绍了Python中实现上下文管理器的具体方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-07-07
  • Python的collections模块中的OrderedDict有序字典

    Python的collections模块中的OrderedDict有序字典

    字典是无序的,但是collections的OrderedDict类为我们提供了一个有序的字典结构,名副其实的Ordered+Dict,下面通过两个例子来简单了解下Python的collections模块中的OrderedDict有序字典:
    2016-07-07
  • opencv调整图像亮度对比度的示例代码

    opencv调整图像亮度对比度的示例代码

    本文通过实例代码给大家介绍了opencv调整图像亮度对比度,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09

最新评论