(Python) 将数百个 PNG 转换为单个 PDF
(Python) Converting Hundreds of PNGs to a Single PDF
我有一个包含 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)
如有任何帮助,我们将不胜感激,我已经做了很多研究,但都没有找到答案。提前致谢。
but input the pages out of the intended order
我怀疑预期的顺序是“按文件名的数字顺序”,即 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]))))
这是您第一次尝试的略微修改版本,它只是在 batch-writing 将文件名排序为 PDF
之前对文件名进行排序(以您第二次尝试尝试做的方式)
我有一个包含 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)
如有任何帮助,我们将不胜感激,我已经做了很多研究,但都没有找到答案。提前致谢。
but input the pages out of the intended order
我怀疑预期的顺序是“按文件名的数字顺序”,即 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]))))
这是您第一次尝试的略微修改版本,它只是在 batch-writing 将文件名排序为 PDF
之前对文件名进行排序(以您第二次尝试尝试做的方式)