2

我有一个包含 452 张图像 (.png) 的文件夹,我正在尝试使用 Python 将其合并到一个 PDF 文件中。每个图像都由它们的预期页码标记,例如“1.png”、“2.png”、......、“452.png”。

此代码在技术上是成功的,但输入的页面超出了预期的顺序。

import img2pdf
from PIL import Image    
with open("output.pdf", 'wb') as f:
    f.write(img2pdf.convert([i for i in os.listdir('.') if i.endswith(".png")]))

我还尝试将数据读取为二进制数据,然后将其转换并写入 PDF,但这会产生 94MB 的单页 PDF。

import img2pdf
from PIL import Image

with open("output.pdf", 'wb') as f:
    for i in range(1, 453):
        img = Image.open(f"{i}.png")
        pdf_bytes = img2pdf.convert(img)
        f.write(pdf_bytes)

任何帮助将不胜感激,我已经做了很多研究,但都没有完成。提前致谢。

4

1 回答 1

4

但输入的页面超出预期的顺序

我怀疑预期的顺序是“按文件名的数字顺序”,即 1.png、2.png、3.png 等等。

这可以通过以下方式解决:

with open("output.pdf", 'wb') as f:
    f.write(img2pdf.convert(sorted([i for i in os.listdir('.') if i.endswith(".png")], key=lambda fname: int(fname.rsplit('.',1)[0]))))

这是您第一次尝试的略微修改版本,它只是在将文件名批量写入 PDF 之前对文件名进行排序(以您第二次尝试的方式)

于 2020-09-21T16:45:08.060 回答