如何使用 Python 程序把 PDF 文件转换成长图 PNG 格式输出图片?
如何使用 Python 程序把 PDF 文件转换成长图 PNG 格式输出图片?
在日常工作中,我们经常会遇到这样的需求:将一个 PDF 文件转换为一张长图(PNG 格式),方便在网页、文档或社交媒体上展示。比如,将一份报告、合同、教程以图片的形式分享,而不是附件。本文将手把手教你如何使用 Python 实现 PDF → PNG 长图的转换,并附上完整示例代码。
文章目录
- 如何使用 Python 程序把 PDF 文件转换成长图 PNG 格式输出图片?
- 一、为什么要把 PDF 转换成长图?
- 二、实现思路
- 三、环境准备
- 1. 安装 Python 包
- 2. 安装 Poppler
- 四、完整代码示例
- 代码说明
- 五、运行效果
- 六、进阶优化
- 七、总结
一、为什么要把 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 Imagedef 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 = 0for page in pages:long_image.paste(page, (0, y_offset))y_offset += page.height# 4. 保存为 PNGlong_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 文件本身。
六、进阶优化
-
支持命令行参数
使用argparse
,让用户通过命令行输入 PDF 路径和输出文件名。 -
分段长图
如果 PDF 页数太多,长图可能过大,可以考虑分段拼接成多张图。 -
背景透明
将Image.new("RGB", ...)
改成Image.new("RGBA", ...)
,可以生成带透明背景的 PNG。 -
指定页码范围
convert_from_path(pdf_path, first_page=1, last_page=5)
可只转换前 5 页。
七、总结
通过 Python 的 pdf2image
+ Pillow
,我们可以轻松实现 PDF → PNG 长图 的转换:
- 适用于合同、简历、教程、报告等文件。
- 代码简洁,几行即可实现。
- 可扩展性强,可以根据需求做更多定制化优化。
如果你也有类似需求,不妨尝试一下这段代码,把你的 PDF 文件转成长图吧! 🚀