如何将一组 PIL 图像转换为 base64 格式的 PDF 字符串?

How to convert an array of PIL images into a base64-formatted PDF string?

下面的这个函数接受一个 JSON 字符串,其中包含一堆 base64 编码的图像。我需要这个东西来 return 一个 base64 编码的 PDF,它确实可以,但它只会给我一页,JSON 字符串中的第一张图片...我有这个代码:

import json
import base64
from PIL import Image
from io import BytesIO
import numpy as np
import cv2

class ImageStuff(models.TransientModel):
   _name = 'image.camera_scan'
   _description = 'Do stuff with your images'

    @api.model
    def generate_pdf_from_b64(self, b64_arr_str):
       b64_arr = json.loads(b64_arr_str)
       pil_arr, count, pil0 = [], 0, False
       for blob in b64_arr:
           b64 = blob['b64'].split(',')[1]
           pil = Image.open(BytesIO(base64.b64decode(b64)))
           if count > 0: pil_arr.append(pil)
           else: pil0 = pil
           count += 1

       in_mem_file = BytesIO()

       pil0.save(in_mem_file, format="PDF", resolution=100.0, 
                 save_all=True, append_images=pil_arr) 
                 # I think it's that line above that doesn't work

       in_mem_file.seek(0)
       img_bytes = in_mem_file.read()
       base64_encoded_result_bytes = base64.b64encode(img_bytes)
       b64_str = base64_encoded_result_bytes.decode('ascii')

       return b64_str

我是 python 的新手(我相信您可以在代码中看到这一点)。但我想尽可能避免使用 python 2.7 未附带的模块。

我在这个东西上使用 Odoo 10.0 API,但我不能使用 pip,所以导入新模块有点麻烦。虽然,如果您认为我真的无法仅使用 PIL 来完成,我仍然非常欢迎您的帮助。

很好用,只是发现odoo 10的PIL模块太过时了,只需要升级一下