【问题标题】:multiple tiff images to pdf with python使用python将多个tiff图像转换为pdf
【发布时间】:2019-12-27 04:51:09
【问题描述】:

我有一个图像文件列表,我想用这些图像生成一个 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])

【问题讨论】:

    标签: python pdf img2pdf


    【解决方案1】:

    可能的黑客攻击可能是通过ImageMagick's convert 运行它:

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

    【讨论】:

    • 感谢您的回复!最终目标是使用 pyinstaller --onefile 生成一个独立的可执行文件。因此,任何人都可以执行 .exe 文件。您的解决方案可以完成这项工作,但我更喜欢不运行命令行的解决方案。我希望我能找到一个。
    • 试试 Python Wand。虽然它需要 ImageMagick。见docs.wand-py.org/en/0.5.7
    • 在这种情况下,我想我更愿意为每个 tiff 文件生成一个 pdf 并合并 pdf,因为共享程序时不需要在每台计算机上安装 ImageMagick。
    【解决方案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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多