Python实现把PDF文件转换成长图PNG格式输出图片

 更新时间:2025年09月17日 08:42:17   作者:猫头虎  
在日常工作中,我们经常会需要将一个 PDF 文件转换为一张长图(PNG 格式),本文将手把手教你如何使用 Python 实现 PDF和 PNG 长图的转换,需要的小伙伴可以了解下

在日常工作中,我们经常会遇到这样的需求:将一个 PDF 文件转换为一张长图(PNG 格式),方便在网页、文档或社交媒体上展示。比如,将一份报告、合同、教程以图片的形式分享,而不是附件。本文将手把手教你如何使用 Python 实现 PDF → PNG 长图的转换,并附上完整示例代码。

一、为什么要把 PDF 转换成长图

  • 方便预览:很多即时通讯工具或社交平台不支持 PDF 直接预览,但图片可以直接展示。
  • 便于分享:将 PDF 转成长图,用户无需安装 PDF 阅读器,直接在浏览器或手机中查看即可。
  • 统一排版:长图在不同平台上不会因为字体缺失、排版不兼容而错位。

二、实现思路

要把 PDF 转换成长图,主要分为两步:

  • 将 PDF 每一页转为单独的图片
  • 将这些图片纵向拼接成长图

Python 中有两个非常好用的库:

  • pdf2image:把 PDF 转换为图片。
  • Pillow:Python 图像处理库,用于拼接图片。

三、环境准备

首先,你需要安装必要的依赖。

1. 安装 Python 包

pip install pdf2image pillow

2. 安装 Poppler

pdf2image 底层依赖 Poppler 来解析 PDF。

macOS

brew install poppler

Ubuntu / Debian

sudo apt-get install poppler-utils

Windows

  • 下载 Poppler for Windows
  • 解压到本地目录,例如 C:\poppler-xx\
  • C:\poppler-xx\bin 添加到系统环境变量 PATH

四、完整代码示例

下面是一个完整的 Python 程序,可以直接运行:

from pdf2image import convert_from_path
from PIL import Image


def pdf_to_long_png(pdf_path, output_path="output.png", dpi=200):
    # 1. 将 PDF 转为图片列表
    pages = convert_from_path(pdf_path, dpi=dpi)

    # 获取宽度和总高度
    widths, heights = zip(*(i.size for i in pages))
    max_width = max(widths)
    total_height = sum(heights)

    # 2. 创建一个空白长图
    long_image = Image.new("RGB", (max_width, total_height), "white")

    # 3. 拼接每一页
    y_offset = 0
    for page in pages:
        long_image.paste(page, (0, y_offset))
        y_offset += page.height

    # 4. 保存为 PNG
    long_image.save(output_path, "PNG")
    print(f"✅ 已生成长图: {output_path}")


if __name__ == "__main__":
    pdf_file = "example.pdf"   # 输入 PDF 文件
    pdf_to_long_png(pdf_file, "long_image.png")

代码说明

  • convert_from_path(pdf_path, dpi):将 PDF 转换为 PIL 图片对象列表,dpi 决定分辨率。
  • Image.new():创建一个空白画布(宽度 = 最大页宽度,高度 = 所有页高度总和)。
  • paste():逐页粘贴到画布上,从而拼成长图。
  • save():最终输出 PNG 文件。

五、运行效果

  • 输入:一个多页 PDF 文件。
  • 输出:一张 long_image.png,包含 PDF 所有页面的完整内容。

这样,你就可以在社交平台、微信公众号、博客里直接展示一份 PDF 内容,而无需上传 PDF 文件本身。

六、进阶优化

1.支持命令行参数

使用 argparse,让用户通过命令行输入 PDF 路径和输出文件名。

2.分段长图

如果 PDF 页数太多,长图可能过大,可以考虑分段拼接成多张图。

3.背景透明

Image.new("RGB", ...) 改成 Image.new("RGBA", ...),可以生成带透明背景的 PNG。

4.指定页码范围

convert_from_path(pdf_path, first_page=1, last_page=5) 可只转换前 5 页。

七、总结

通过 Python 的 pdf2image + Pillow,我们可以轻松实现 PDF → PNG 长图 的转换:

  • 适用于合同、简历、教程、报告等文件。
  • 代码简洁,几行即可实现。
  • 可扩展性强,可以根据需求做更多定制化优化。

如果你也有类似需求,不妨尝试一下这段代码,把你的 PDF 文件转成长图吧!

到此这篇关于Python实现把PDF文件转换成长图PNG格式输出图片的文章就介绍到这了,更多相关Python PDF转长图PNG内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python使用sort()方法对数组进行排序的操作指南

    Python使用sort()方法对数组进行排序的操作指南

    在开发过程中,经常需要对数据进行排序,Python 中的 sort() 方法是用来对列表进行排序的,它是一个非常常用且高效的排序工具,本文将通过一个实际项目的代码示例,来讲解如何使用 sort() 方法对数组进行排序,需要的朋友可以参考下
    2025-06-06
  • python使用标准库根据进程名如何获取进程的pid详解

    python使用标准库根据进程名如何获取进程的pid详解

    Python有一套很有用的标准库(standard library)。标准库会随着Python解释器,一起安装在你的电脑中的,所以下面这篇文章主要给大家介绍了关于python使用标准库根据进程名如何获取进程pid的相关资料,需要的朋友可以参考下。
    2017-10-10
  • python数据处理详情

    python数据处理详情

    这篇文章主要介绍了python数据处理详情,文章通过json文件的一个数据表展开对主题的详细说明,具有一定的参考价值需要的小伙伴可以参考一下
    2022-04-04
  • python中使用smtplib和email模块发送邮件实例

    python中使用smtplib和email模块发送邮件实例

    python脚本发邮件,一般会用到smtplib和email这两个模块。看看该模块怎么使用,先看smtplib模块。 smtplib模块定义了一个简单的SMTP客户端,可以用来在互联网上发送邮件
    2014-04-04
  • PyTorch快速搭建神经网络及其保存提取方法详解

    PyTorch快速搭建神经网络及其保存提取方法详解

    本篇文章主要介绍了PyTorch快速搭建神经网络及其保存提取方法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 如何用Python中Tushare包轻松完成股票筛选(详细流程操作)

    如何用Python中Tushare包轻松完成股票筛选(详细流程操作)

    这篇文章主要介绍了如何用Python中Tushare包轻松完成股票筛选(详细流程操作),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 让Django的BooleanField支持字符串形式的输入方式

    让Django的BooleanField支持字符串形式的输入方式

    这篇文章主要介绍了让Django的BooleanField支持字符串形式的输入方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python中apply函数详情

    python中apply函数详情

    这篇文章主要介绍了python中apply函数详情,该函数最有用的是第一个参数,这个参数是函数,相当于C/C++的函数指针,更多详细内容,需要的小伙伴可以参考下面文章内容
    2022-01-01
  • 10分钟快速入门Pandas库

    10分钟快速入门Pandas库

    pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的,这篇文章主要介绍了10分钟快速入门Pandas库,重点介绍pandas常见使用方法,结合实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Python numpy 点数组去重的实例

    Python numpy 点数组去重的实例

    下面小编就为大家分享一篇Python numpy 点数组去重的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04

最新评论