Python实现将单张或多张图片转PDF

 更新时间:2025年11月08日 09:29:03   作者:SunnyDays1011  
这篇文章主要为大家详细介绍了如何使用Python实现将单张或多张图片转PDF,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

在整理资料或处理图片时,你有没有遇到过这样的困扰:手机拍的照片、扫描的文档、各种格式的图片零散地散落在电脑里,想要统一管理却又不想一个个手动插入 PDF?其实,把这些图片转换成 PDF,不仅能让资料更整齐,还方便分享和归档,而且可以保证图片清晰不丢失。

这篇博客将分享如何使用 Python 将图片转换为PDF。从单张图片转换,到批量处理多张图片,再到不同格式的支持和页面布局的优化,都可以用简单的几行代码完成。

准备工作:安装图片转PDF库

要在 Python中将图片转换为PDF,需要选择一个支持将图片写入到PDF的库。本文所使用的库是Spire.PDF for Python,它是一个PDF文档处理库,功能丰富,支持插入多种图片格式,包括 PNG、JPEG、TIFF 和 SVG,还支持 PDF 页面布局自定义、批量处理和合并图片等操作。

你可以通过以下 pip 命令安装它:

pip install Spire.PDF

安装完成后,就可以在 Python 中直接调用该库的类和方法了。

单张图片转换为 PDF

如果你只需要将一张图片转换为 PDF,可以按照以下步骤操作:

  • 创建 PdfDocument 对象。
  • 将页面边距设置为零。
  • 使用 PdfImage.FromFile() 载入图片,并获取图片尺寸。
  • 添加一个与图片大小相同的 PDF 页面。
  • 将图片绘制到页面上。
  • 保存 PDF 文件。

下面是完整的 Python 代码示例:

from spire.pdf.common import *
from spire.pdf import *

# 创建 PdfDocument 对象
pdf = PdfDocument()

# 设置页面边距为 0
pdf.PageSettings.SetMargins(0.0)

# 载入图片
image = PdfImage.FromFile("Sample.jpg")

# 获取图片宽高
width = image.PhysicalDimension.Width
height = image.PhysicalDimension.Height

# 创建与图片同大小的页面
page = pdf.Pages.Add(SizeF(width, height))

# 绘制图片
page.Canvas.DrawImage(image, 0.0, 0.0, width, height)

# 保存 PDF
pdf.SaveToFile("单图.pdf")
pdf.Dispose()

运行这段代码后,你就能得到与图片尺寸完全一致的 PDF 文件。

将文件夹中多张图片批量转换为 PDF

如果你有一个文件夹里存放了多张图片,需要将它们统一转换成一个 PDF,可以采用批量处理方法:

  • 遍历文件夹中的图片。
  • 每张图片都创建一个与其尺寸相同的 PDF 页面。
  • 将图片绘制在对应页面上。
  • 保存最终的 PDF 文件。

示例代码如下:

from spire.pdf.common import *
from spire.pdf import *
import os

# 创建 PdfDocument 对象
doc = PdfDocument()
doc.PageSettings.SetMargins(0.0)

# 图片所在文件夹
path = '图片/'
files = os.listdir(path)

for root, dirs, files in os.walk(path):
    for file in files:
        # 载入图片
        image = PdfImage.FromFile(os.path.join(root, file))
        width = image.PhysicalDimension.Width
        height = image.PhysicalDimension.Height
        
        # 添加页面
        page = doc.Pages.Add(SizeF(width, height))
        
        # 绘制图片
        page.Canvas.DrawImage(image, 0.0, 0.0, width, height)

# 保存 PDF
doc.SaveToFile('output/多图.pdf')
doc.Dispose()

这样,你就可以一次性将整个文件夹的图片生成一个 PDF,方便管理和分享。

调整 PDF 布局与图片位置

在一些场景下,你可能希望 PDF 页面大小统一,例如使用 A4 页面,同时将图片居中显示。可以通过设置页面大小、边距以及计算图片在页面上的位置来实现:

from spire.pdf.common import *
from spire.pdf import *

pdf = PdfDocument()
pdf.PageSettings.SetMargins(5.0)  # 设置边距
pdf.PageSettings.Size = PdfPageSize.A4()  # 设置页面为 A4

# 添加新页面
page = pdf.Pages.Add()

# 载入图片
image = PdfImage.FromFile("Sample.jpg")
width = image.PhysicalDimension.Width
height = image.PhysicalDimension.Height

# 计算居中位置
x = (page.GetClientSize().Width - width) / 2
y = (page.GetClientSize().Height - height) / 2

# 绘制图片
page.Canvas.DrawImage(image, x, y, width, height)

pdf.SaveToFile("自定义.pdf")
pdf.Dispose()

通过这种方法,你可以保证生成的 PDF 页面整齐、美观,适合打印或正式展示。

其他图片格式(如SVG、TIFF)转 PDF

除了将 PNG、JPEG、BMP等图片格式转换为 PDF 外,Spire.PDF还支持将SVG 转换为PDF。

from spire.pdf.common import *
from spire.pdf import *

# 创建 PdfDocument 对象
document = PdfDocument()

# 加载 SVG 文件
document.LoadFromSvg("SVG.svg")

# 保存为 PDF 文件
document.SaveToFile("output/SVG.pdf", FileFormat.PDF)
document.Dispose()

如果有特殊需求,例如将 TIFF 转 PDF,你可以借助 Pillow 库(pip install pillow)先将每一页转换为 PNG,再生成 PDF:

from spire.pdf.common import *
from spire.pdf import *
from PIL import Image
import os

# 创建PDF文档并移除页边距
pdf = PdfDocument()
pdf.PageSettings.SetMargins(0.0)

# 加载TIFF图片,将每一帧转换为PNG并添加到PDF
tiff_image = Image.open("example.tiff")
for i in range(tiff_image.n_frames):
    tiff_image.seek(i)
    frame = tiff_image.copy()
    frame.save(f"temp_{i}.png")
    image = PdfImage.FromFile(f"temp_{i}.png")
    page = pdf.Pages.Add(SizeF(image.PhysicalDimension.Width, image.PhysicalDimension.Height))
    page.Canvas.DrawImage(image, 0.0, 0.0)

# 保存文档
pdf.SaveToFile("output/TIFF转PDF.pdf")
pdf.Dispose()

通过这种方法,每一帧 TIFF 都会生成 PDF 中的一页,保证了图像质量和顺序。

实用方法示例:按文件名顺序生成 PDF

假设你有一个文件夹存放会议照片,文件名是按照时间顺序命名的。我们可以按文件名顺序,把所有图片合并到一个 PDF 中。

from spire.pdf import PdfDocument, PdfImage
from spire.pdf.common import SizeF
import os

# 创建 PDF
pdf = PdfDocument()
pdf.PageSettings.SetMargins(0.0)

# 图片所在文件夹
folder_path = "MeetingPhotos/"
images = sorted(os.listdir(folder_path))  # 按文件名排序

for img_file in images:
    # 仅处理常见图片格式
    if img_file.lower().endswith((".jpg", ".jpeg", ".png")):
        image_path = os.path.join(folder_path, img_file)
        img = PdfImage.FromFile(image_path)
        
        # 添加与图片同尺寸页面
        page = pdf.Pages.Add(SizeF(img.PhysicalDimension.Width, img.PhysicalDimension.Height))
        page.Canvas.DrawImage(img, 0.0, 0.0, img.PhysicalDimension.Width, img.PhysicalDimension.Height)

# 保存 PDF
pdf.SaveToFile("output/会议照片.pdf")
pdf.Dispose()

这样,每张图片就会生成一页,顺序严格按照文件名排列,非常适合会议照片或扫描文档的整理。

高级操作:图片缩放与排版

在实际应用中,图片大小可能不一,如果直接生成 PDF,可能出现页面空白或图片过大。可以通过缩放或调整位置,达到统一效果:

page_width, page_height = 595.0, 842.0  # A4 尺寸,单位为点

for img_file in images:
    img = PdfImage.FromFile(os.path.join(folder_path, img_file))

    scale = min(page_width / img.PhysicalDimension.Width, page_height / img.PhysicalDimension.Height)

    width = img.PhysicalDimension.Width * scale
    height = img.PhysicalDimension.Height * scale

    page = pdf.Pages.Add(SizeF(page_width, page_height))

    x = (page_width - width) / 2
    y = (page_height - height) / 2
    page.Canvas.DrawImage(img, x, y, width, height)

这样生成的 PDF 页面大小统一,图片居中,排版更加美观,适合打印或正式文档归档。

为了让 PDF 更专业,你还可以自动生成封面和目录。比如:

  • 封面:可以先添加一页 PDF,绘制标题、日期和简单说明。
  • 目录:扫描图片文件名,生成每页对应的说明,放在封面后面。

这样整理出的 PDF 就像一本正式的电子资料,不仅好看,也方便阅读。

总结

使用 Python 将图片整理成 PDF,不仅节省了手动操作时间,还能让资料更整齐、专业。无论是单张图片、批量图片,还是不同格式的图像,都可以轻松处理。通过本文示例,你可以快速整理你的图片资料,生成高质量 PDF 文档。

到此这篇关于Python实现将单张或多张图片转PDF的文章就介绍到这了,更多相关Python图片转PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python palywright库基本使用

    python palywright库基本使用

    这篇文章主要介绍了python palywright库的基本使用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • python进阶之协程你了解吗

    python进阶之协程你了解吗

    这篇文章主要为大家详细介绍了python进阶之协程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Python轻量级ORM框架Peewee访问sqlite数据库的方法详解

    Python轻量级ORM框架Peewee访问sqlite数据库的方法详解

    这篇文章主要介绍了Python轻量级ORM框架Peewee访问sqlite数据库的方法,结合实例形式较为详细的分析了ORM框架的概念、功能及peewee的安装、使用及操作sqlite数据库的方法,需要的朋友可以参考下
    2017-07-07
  • python中列表list切分的实现

    python中列表list切分的实现

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

    Python3+Django get/post请求实现教程详解

    这篇文章主要介绍了Python3+Django get/post请求实现教程详解,需要的朋友可以参考下
    2021-02-02
  • python读取文件夹中图片的图片名并写入excel表格

    python读取文件夹中图片的图片名并写入excel表格

    这篇文章介绍了使用python读取文件夹中图片的图片名并写入excel表格的方法。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • 如何使用 Pylint 来规范 Python 代码风格(来自IBM)

    如何使用 Pylint 来规范 Python 代码风格(来自IBM)

    本文通过详细的理论介绍和简单易懂的实例全面介绍了 Python 代码分析工具 Pylint。相信读者看完后一定可以轻松地将 Pylint 运用到自己的开发工程中
    2018-04-04
  • 利用Python进行音频信号处理和音乐生成的代码示例

    利用Python进行音频信号处理和音乐生成的代码示例

    随着计算机技术的快速发展,音频信号处理和音乐生成逐渐成为了Python程序员们的关注点,本文将介绍如何利用Python进行音频信号处理和音乐生成,包括基本概念、常用库的使用以及实际的代码示例,需要的朋友可以参考下
    2024-06-06
  • Python wxauto 库解锁微信自动化的无限可能(示例代码)

    Python wxauto 库解锁微信自动化的无限可能(示例代码)

    wxauto库是基于Python的一个自动化工具,它主要用于操作和自动化WxPython应用程序,这篇文章主要介绍了Python wxauto 库解锁微信自动化的无限可能,需要的朋友可以参考下
    2024-07-07
  • Python实现从订阅源下载图片的方法

    Python实现从订阅源下载图片的方法

    这篇文章主要介绍了Python实现从订阅源下载图片的方法,涉及Python采集的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03

最新评论