Python img2pdf 库实现图像批量转换为 PDF 教程
什么是 img2pdf 库?
img2pdf 是一个基于 Python 的开源库,旨在将多种图像格式无损地转换为 PDF 文件。与使用 Pillow 或 ReportLab 等库手动构建 PDF 不同, 直接读取图像的原始数据并将其嵌入到 PDF 结构中,从而最大程度保留图像质量。
本文介绍 Python img2pdf 库的使用,支持 JPG/PNG/GIF/BMP 等格式转换为 PDF。涵盖安装、基础转换、页面尺寸调整、元数据设置及错误处理。无需额外软件即可实现批量自动化处理,适用于文档归档、打印分享等场景。

img2pdf 库?img2pdf 是一个基于 Python 的开源库,旨在将多种图像格式无损地转换为 PDF 文件。与使用 Pillow 或 ReportLab 等库手动构建 PDF 不同, 直接读取图像的原始数据并将其嵌入到 PDF 结构中,从而最大程度保留图像质量。
img2pdf它支持多种常见图像格式,包括 JPG、PNG、GIF、BMP 等,并且能够自动处理图像的大小和方向,使其适应 PDF 页面的设置。此外,它还支持设置 PDF 的元数据(Metadata),如标题、作者、主题等,这对于文档管理和归档非常重要。
img2pdf 库?在实际工作中,经常需要将扫描的文档、照片、漫画或数据可视化图表整理成 PDF 格式,以便于打印、分享或长期存档。使用 img2pdf 库有以下优势:
确保已安装 Python 3.6 及以上版本。可以通过命令行输入 python --version 检查。
img2pdf使用 pip 包管理器进行安装:
pip install img2pdf
img2pdf 主要依赖 Ghostscript 来处理某些特定功能(如页面大小调整)。虽然基础转换通常不需要额外安装 Ghostscript,但为了获得最佳兼容性(特别是涉及页面尺寸修改时),建议系统已安装 Ghostscript。
brew install ghostscript)。sudo apt-get install ghostscript)。最简单的使用方式是导入库并调用 convert 函数。该函数接受一个图像路径列表,返回包含 PDF 内容的字节流。
import img2pdf
# 定义输入图像列表
images = ["cat.jpg", "dog.jpg"]
output_file = "animals.pdf"
# 将图像转换为 PDF 字节流
pdf_bytes = img2pdf.convert(images)
# 写入文件
with open(output_file, "wb") as f:
f.write(pdf_bytes)
print(f"成功生成 {output_file}")
运行上述代码后,当前目录下会生成 animals.pdf,其中包含两张按顺序排列的图片。
默认情况下,PDF 页面尺寸会根据第一张图像的尺寸决定。如果需要统一为 A4 或 Letter 纸张,可以使用 pagesize 参数。
import img2pdf
from PIL import Image
images = ["photo1.jpg", "photo2.jpg"]
output = "a4_photos.pdf"
# 指定页面大小为 A4 (595 x 842 points)
pdf_bytes = img2pdf.convert(
images,
layout_fun=img2pdf.get_fixed_dpi_layout(595, 842),
rotation=img2pdf.Rotation.auto
)
with open(output, "wb") as f:
f.write(pdf_bytes)
如果图像方向与页面不符,可以强制旋转。img2pdf 提供了 Rotation 枚举类。
import img2pdf
images = ["portrait_photo.jpg"]
output = "landscape_pdf.pdf"
# 强制旋转为横向
pdf_bytes = img2pdf.convert(
images,
rotation=img2pdf.Rotation.rotate_90
)
with open(output, "wb") as f:
f.write(pdf_bytes)
支持的旋转选项包括:
img2pdf.Rotation.auto: 自动判断img2pdf.Rotation.rotate_90: 顺时针旋转 90 度img2pdf.Rotation.rotate_180: 旋转 180 度img2pdf.Rotation.rotate_270: 逆时针旋转 90 度img2pdf.Rotation.no_rotation: 不旋转可以为生成的 PDF 添加标题、作者等信息,这有助于在文件管理器中查看摘要。
import img2pdf
images = ["report.png"]
output = "report_metadata.pdf"
metadata = {
b'Title': b'季度报告',
b'Author': b'技术部',
b'Subject': b'数据分析'
}
pdf_bytes = img2pdf.convert(
images,
metadata=metadata
)
with open(output, "wb") as f:
f.write(pdf_bytes)
确保传入的图像路径正确且文件存在。建议使用绝对路径或在脚本执行前确认当前工作目录。
import os
if not all(os.path.exists(img) for img in images):
raise FileNotFoundError("部分图像文件不存在")
确保输出目录有写入权限。如果遇到 PermissionError,请检查文件夹权限或尝试以管理员身份运行脚本。
对于超高分辨率的大图或大量图片,一次性转换可能消耗大量内存。建议分批处理或使用流式写入(如果适用)。
os.listdir 遍历文件夹,自动收集所有图片路径。img2pdf 默认保留原始图像编码。如需减小体积,可先使用 Pillow 压缩图像再转换。concurrent.futures 模块并行处理多个小批次。| 特性 | img2pdf | Pillow + ReportLab |
|---|---|---|
| 转换速度 | 快(直接嵌入) | 慢(需重绘) |
| 图像质量 | 无损 | 可能有损 |
| 灵活性 | 中等(主要控制布局) | 高(可完全自定义) |
| 学习成本 | 低 | 高 |
本文详细介绍了如何使用 Python 的 img2pdf 库将多张图像高效转换为 PDF 文件。通过掌握基础转换、页面尺寸调整、方向旋转及元数据设置,用户可以轻松实现文档的自动化处理流程。该方案无需安装额外的专业软件,非常适合开发集成工具或日常办公自动化需求。
若遇到更复杂的排版需求,建议结合 Pillow 进行预处理后再使用 img2pdf 生成最终 PDF。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online