python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python图片转PDF

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

作者: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,可以按照以下步骤操作:

下面是完整的 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,可以采用批量处理方法:

示例代码如下:

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 就像一本正式的电子资料,不仅好看,也方便阅读。

总结

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

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

您可能感兴趣的文章:
阅读全文