用Python将多个TIFF图像转换为PDF

3

我可以帮您翻译关于IT技术相关的内容,以下是需要翻译的内容:

我有一个图像文件列表,想要生成一个包含这些图像的单个output.pdf文件。

下面的代码仅适用于一个图像文件(这里是image_list的第一个元素):

with open("output.pdf","wb") as f, io.BytesIO() as output:
    img = Image.open(image_list[0])
    img.save(output, format='tiff')
    f.write(img2pdf.convert(output.getvalue()))

我可以将这段代码适应于完整的图像文件列表吗?

我尝试过:

with open("output.pdf","wb") as f, io.BytesIO() as output:
        img = Image.open(image_list[0])
        img.save(output, format='tiff')
        img2 = Image.open(image_list[1])
        img2.save(output, format='tiff')
        f.write(img2pdf.convert(output.getvalue()))

但是它不起作用(创建的PDF仅包含最后一个图像,即image_list [1])。
2个回答

2

可能的黑客攻击方式是通过ImageMagickconvert运行它:

import os
os.system('convert '+' '.join(image_list)+' output.pdf')

感谢您的回复!最终目标是使用pyinstaller --onefile生成一个独立的可执行文件。这样,任何人都可以执行.exe文件。您提供的解决方案能够完成任务,但我更希望找到一种不需要运行命令行的解决方案。希望能找到一个合适的方法。 - undefined
尝试使用Python Wand。虽然需要ImageMagick。请参阅http://docs.wand-py.org/en/0.5.7/。 - undefined
在这种情况下,我认为我更喜欢为每个tiff文件生成一个pdf,并将pdf合并在一起,因为这样在共享程序时不需要在每台计算机上安装ImageMagick。 - undefined

2
我终于使用了以下代码:

for i in....     
            # Create one pdf file per tiff file
            with open(str(i) + '.pdf', "wb") as f, io.BytesIO() as output:
                img = PIL.Image.open(str(i) + '.tiff')
                img.save(output, format='tiff')
                f.write(img2pdf.convert(output.getvalue()))

# merge the pdf file into one output pdf file
pdf_writer = PdfFileWriter()

output_file = publication_number + ".pdf"
file_list = os.listdir()
pdf_list = []
for file in file_list:
    if file.endswith(".pdf"):
        pdf_list.append(file)
pdf_list.sort(key=lambda f: int(
    ''.join(filter(str.isdigit, f))))  # trier la liste d'image du plus petit au plus grand (et pas 1, 10, 11, 2, 3)

for pdf_file in pdf_list:
    pdf_reader = PdfFileReader(pdf_file)
    for page in range(pdf_reader.getNumPages()):
        pdf_writer.addPage(pdf_reader.getPage(page))
with open(output_file, 'wb') as fh:
    pdf_writer.write(fh)

for i in range(1, max_page + 1):  
    os.remove(str(i) + '.tiff')
    os.remove(str(i) + '.pdf')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接