常用的图片转PDF库有fpdf,img2pdf
fpdf库图片转PDF,只支持下载到本地的图片转pdf,不支持下载的二进制格式还未保存的图片,代码如下
一、使用fpdf库将图片转换为PDF
from fpdf import FPDF
pdf = FPDF() #声明一个pdf对象
pdf.set_auto_page_break(0) # 自动分页设为False
pdf.add_page() #添加一页
pdf.image(path, w=190) #path只能是图片的路径,不能是文件对象 w参数指定宽
pdf.output('template.pdf', "F")
二、使用img2pdf库将图片批量转换为pdf
推荐使用img2pdf库,不仅支持本地图片批量或单个转pdf,而且支持下载的二进制未保存图片直接批量转pdf,而且代码更简洁,只需要一行代码
1、批量转换本地图片
import glob,img2pdf
#glob()参数为存储图片的文件夹路径,使用glob可以直接获取文件夹下的所有文件绝对路径
#注意文件夹路径后一定要加*,表示获取文件夹下面的文件路径
#获取文件路径,使用glob库比os库更方便
files = glob.glob(r'C:\\desktop\\images\\*')
img_list = []
for file in files:
#遍历图片,将图片路径添加到列表
img_list.append(file)
#将图片列表批量转换为pdf
with open('template.pdf','wb') as f:
#convert()参数支持图片路径列表或单个图片路径,也支持图片对象列表或单个图片对象
f.write(img2pdf.convert(img_list ))
2、批量将图片对象添加到PDF(保存在内存中的图片对象,未保存在本地)
import img2pdf,io,requests
#图片下载网址列表
url_list = [
'https://file.icve.com.cn/ssykt_gen/219/149/36F257A77593A0EB8856CE36229AB295.pdf/1.png',
'https://file.icve.com.cn/ssykt_gen/219/149/36F257A77593A0EB8856CE36229AB295.pdf/2.png',
'https://file.icve.com.cn/ssykt_gen/219/149/36F257A77593A0EB8856CE36229AB295.pdf/3.png',
'https://file.icve.com.cn/ssykt_gen/219/149/36F257A77593A0EB8856CE36229AB295.pdf/4.png',
'https://file.icve.com.cn/ssykt_gen/219/149/36F257A77593A0EB8856CE36229AB295.pdf/5.png'
]
#存放图片对象
img_list = []
for url in url_list:
#遍历下载图片
res = requests.get(url)
#将二进制图片转换为图片对象
bytes_png = io.BytesIO(res.content)
#将图片对象添加到列表
img_list.append(bytes_png)
#将图片对象列表批量转换为pdf
with open('template.pdf','wb') as f:
#convert()参数支持图片路径列表或单个图片路径,也支持图片对象列表或单个图片对象
f.write(img2pdf.convert(img_list ))