使用Python实现将图片(JPG/PNG)转换为PDF

 更新时间:2026年03月13日 08:19:57   作者:LSTM97  
在数字化时代,图像与文档的转换与管理变得越来越重要,本文将介绍如何利用 Spire.PDF for Python 库实现图像转换和合并操作,有需要的小伙伴可以了解下

在数字化时代,图像与文档的转换与管理变得越来越重要。尤其是在需要将多张 JPG 或 PNG 图片合并成一份 PDF 文件时,使用 Python 编程语言提供了一种简单而高效的解决方案。本文将介绍如何利用 Spire.PDF for Python 库实现图像转换和合并操作。

一、工具准备

在开始之前,确保你已经安装了 Python 环境以及 Spire.PDF for Python 库。可以通过以下命令进行安装:

pip install Spire.PDF

此外,确保你的电脑上有需要转换的 JPG 或 PNG 图像,并将其放在一个文件夹中。

二、代码实现

以下是将 JPG 和 PNG 图片转换为 PDF 文件的示例代码:

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

# 创建 PdfDocument 对象
doc = PdfDocument()

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

# 获取图片存储文件夹路径
path = "C:\Users\Administrator\Desktop\Images\"
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))

        # 在页面的 (0, 0) 位置绘制图像
        page.Canvas.DrawImage(image, 0.0, 0.0, width, height)
      
# 保存文件
doc.SaveToFile("output/CombineImages.pdf")
doc.Dispose()

三、代码解析

导入库 :首先,导入所需的 spire.pdfos 库,后者用于文件和目录操作。

创建 PdfDocument 对象 :使用 PdfDocument() 初始化一个 PDF 文档对象,之后可以对该对象进行进一步操作。

设置页面边距 :调用 SetMargins(0.0) 方法,将页面边距设置为 0,这样图像可以完全填满整个页面。

读取图像 :使用 os.listdir(path) 获取指定目录下的所有文件,并使用 os.walk 遍历该目录中的所有文件。

加载和处理图像 :对于每个文件,使用 PdfImage.FromFile() 函数加载图像,并获取其宽度和高度。

添加页面 :根据图像的尺寸创建一个与其相同大小的页面,使用 doc.Pages.Add() 方法。

绘制图像 :使用 page.Canvas.DrawImage() 将图像绘制到页面的指定位置。

保存 PDF 文件 :最后,调用 doc.SaveToFile() 将合并后的 PDF 文件保存到指定路径。

四、方法补充

Python 实现图片转PDF

以下是将一个文件夹中的多张图片转换为一个PDF文件的示例。几乎每行代码都有详细注释,并且Spire.PDF for Python提供的接口也非常简单易懂,大家可直接查看。

from spire.pdf.common import *
from spire.pdf import *
import os
# 创建PdfDocument对象
doc = PdfDocument()
# 将页边距设置为0
doc.PageSettings.SetMargins(0.0)
# 指定存放图片的文件夹路径
path = "C:\\Users\\Administrator\\Desktop\\图片\\"
files = os.listdir(path)
# 遍历文件夹中的文件
for root, dirs, files in os.walk(path):
    for file in files:
        # 加载图片
        image = PdfImage.FromFile(os.path.join(root, file))  #FromFile(os.path.join(root, file))
        # 获取图片的宽度和高度
        width = image.PhysicalDimension.Width
        height = image.PhysicalDimension.Height
        # 在PDF中添加与图片相同尺寸的页面
        page = doc.Pages.Add(SizeF(width, height))
        # 从页面的 (0, 0) 处开始绘制图片
        page.Canvas.DrawImage(image, 0.0, 0.0, width, height)
# 保存生成文件
doc.SaveToFile("图片转Pdf.pdf")
doc.Dispose()

Python3将jpg转为pdf文件

#coding=utf-8
#!/usr/bin/env python
"""
convert image to pdf file
"""
#Author: mrbeann
import os
import sys
import glob
import platform
from reportlab.lib.pagesizes import letter, A4, landscape
from reportlab.platypus import SimpleDocTemplate, Image
from reportlab.lib.units import inch
from reportlab.pdfgen import canvas
from reportlab import rl_settings
from PIL import Image
import importlib,sys
#importlib.reload(sys)
#sys.setdefaultencoding("utf-8")
def topdf(path,recursion=None,pictureType=None,sizeMode=None,width=None,height=None,fit=None,save=None):
"""
Parameters
----------
path : string
path of the pictures
recursion : boolean
None or False for no recursion
True for recursion to children folder
wether to recursion or not
pictureType : list
type of pictures,for example :jpg,png...
sizeMode : int
None or 0 for pdf's pagesize is the biggest of all the pictures
1 for pdf's pagesize is the min of all the pictures
2 for pdf's pagesize is the given value of width and height
to choose how to determine the size of pdf
width : int
width of the pdf page
height : int
height of the pdf page
fit : boolean
None or False for fit the picture size to pagesize
True for keep the size of the pictures
wether to keep the picture size or not
save : string
path to save the pdf
"""
if platform.system() == 'Windows':
path = path.replace('\\','/')
if path[-1] != '/':
path = (path + '/')
if recursion == True:
for i in os.listdir(path):
if os.path.isdir(os.path.abspath(os.path.join(path, i))):
topdf(path+i,recursion,pictureType,sizeMode,width,height,fit,save)
filelist = []
if pictureType == None:
filelist = glob.glob(os.path.join(path, '*.jpg'))
else:
for i in pictureType:
filelist.extend(glob.glob(os.path.join(path, '*.'+i)))
maxw = 0
maxh = 0
if sizeMode == None or sizeMode == 0:
for i in filelist:
im = Image.open(i)
if maxw < im.size[0]:
maxw = im.size[0]
if maxh < im.size[1]:
maxh = im.size[1]
elif sizeMode == 1:
maxw = 999999
maxh = 999999
for i in filelist:
im = Image.open(i)
if maxw > im.size[0]:
maxw = im.size[0]
if maxh > im.size[1]:
maxh = im.size[1]
else:
if width == None or height == None:
raise Exception("no width or height provid")
maxw = width
maxh = height
maxsize = (maxw,maxh)
if save == None:
filename_pdf = path + path.split('/')[-2]
else:
filename_pdf = save + path.split('/')[-2]
filename_pdf = filename_pdf + '.pdf'
c = canvas.Canvas(filename_pdf, pagesize=maxsize )
l = len(filelist)
for i in range(l):
(w, h) =maxsize
width, height = letter
if fit == True:
c.drawImage(filelist[i] , 0,0)
else:
c.drawImage(filelist[i] , 0,0,maxw,maxh)
c.showPage()
c.save()
def main():
topdf(u'F:/gitplace/jpg2pdf/test',pictureType=['png','jpg'],save='F:/gitplace/jpg2pdf/test/新建文件夹')
if __name__ == '__main__':
main()

五、总结

通过使用 Spire.PDF for Python 库,我们可以轻松地将多张 JPG 或 PNG 图像合并为一份 PDF 文件。这种方法不仅简单高效,而且在处理大量图像时表现出色。无论是工作还是个人项目,这种自动化的图片处理方式都能够节省大量时间。希望这篇文章能帮助你更好地掌握图像转换与合并的技巧!

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

相关文章

  • Python获取当前路径实现代码

    Python获取当前路径实现代码

    这篇文章主要介绍了 Python获取当前路径实现代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • python3.5仿微软计算器程序

    python3.5仿微软计算器程序

    这篇文章主要为大家详细介绍了python3.5仿微软计算器程序的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • python获取网络图片方法及整理过程详解

    python获取网络图片方法及整理过程详解

    这篇文章主要介绍了python获取网络图片方法及整理过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • python正则表达式re.group()用法

    python正则表达式re.group()用法

    本文主要介绍了python正则表达式re.group()用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 在pycharm中创建django项目的示例代码

    在pycharm中创建django项目的示例代码

    这篇文章主要介绍了在pycharm中创建django项目的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Python入门教程(二十一)Python的数组

    Python入门教程(二十一)Python的数组

    这篇文章主要介绍了Python入门教程(二十一)Python的数组,数组是一种特殊变量,数组可以在单个名称下保存多个值,我们可以通过引用索引号来访问这些值,需要的朋友可以参考下
    2023-04-04
  • python实现list由于numpy array的转换

    python实现list由于numpy array的转换

    下面小编就为大家分享一篇python实现list由于numpy array的转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python NumPy教程之数据类型对象详解

    Python NumPy教程之数据类型对象详解

    每个 ndarray 都有一个关联的数据类型 (dtype) 对象。这个数据类型对象(dtype)告诉我们数组的布局。本文将通过示例详细讲讲NumPy的数据类型对象,需要的可以参考一下
    2022-08-08
  • 浅谈keras中的目标函数和优化函数MSE用法

    浅谈keras中的目标函数和优化函数MSE用法

    这篇文章主要介绍了浅谈keras中的目标函数和优化函数MSE用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Django配置文件代码说明

    Django配置文件代码说明

    在本篇文章里小编给大家整理了关于Django配置文件代码说明知识点,有需要的朋友们学习下。
    2019-12-12

最新评论