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

作者:

文章目录
  • 要在 Python中将图片转换为PDF,需要选择一个支持将图片写入到PDF的库。本文所使用的库是Spire.PDF for Python,它是一个PDF文档处理库,功能丰富,支持插入多种图片格式,包括 PNG、JPEG、TIFF 和 SVG,还支持 PDF 页面布局自定义、批量处理和合并图片等操作。 你可以通过以下 pip 命令安装它: pip install Spire.PDF 安装完成后,就可以在 Python 中直接调用该库的类和方法了。
  • 如果你只需要将一张图片转换为 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 文件。 示例代码如下: 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 页面大小统一,例如使用 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 页面整齐、美观,适合打印或正式展示。
  • 除了将 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 中。 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将图片转换为PDF格式的三种常见方法 使用Python实现pdf转图片再进行OCR识别 Python实现将图片批量转为PDF 用Python将PDF文件转存为图片的实现方法 Python实现将HTML转为PDF/图片/XML/XPS格式 使用Python实现将PDF转为图片 基于Python轻松实现PDF转图片
  • 目录
    • 准备工作:安装图片转PDF库
    • 单张图片转换为 PDF
    • 将文件夹中多张图片批量转换为 PDF
    • 调整 PDF 布局与图片位置
    • 其他图片格式(如SVG、TIFF)转 PDF
    • 实用方法示例:按文件名顺序生成 PDF
    • 高级操作:图片缩放与排版
    • 总结

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

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

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

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

    pip install Spire.PDF

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

    如果你只需要将一张图片转换为 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 文件。

    示例代码如下:

    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 页面大小统一,例如使用 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 页面整齐、美观,适合打印或正式展示。

    除了将 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 中。

    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将图片转换为PDF格式的三种常见方法
    • 使用Python实现pdf转图片再进行OCR识别
    • Python实现将图片批量转为PDF
    • 用Python将PDF文件转存为图片的实现方法
    • Python实现将HTML转为PDF/图片/XML/XPS格式
    • 使用Python实现将PDF转为图片
    • 基于Python轻松实现PDF转图片

    站内搜索