python 二进制图片下载后不用保存直接批量转PDF文件

常用的图片转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 ))

你可能感兴趣的:(pdf,python)