从图像列表创建PDF

2024-09-27 07:34:44 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有什么实用的方法可以使用Python从图像文件列表中创建PDF?

在Perl中,我知道that module。有了它,我可以用3行创建一个PDF文件:

use PDF::FromImage;
...
my $pdf = PDF::FromImage->new;
$pdf->load_images(@allPagesDir);
$pdf->write_file($bookName . '.pdf');

我需要做一些非常类似的事情,但在Python中。我知道pyPdf模块,但我想要一些简单的东西。

@编辑

如果你是通过谷歌来的,下面是代码:

from fpdf import FPDF
from PIL import Image
def makePdf(pdfFileName, listPages, dir = ''):
    if (dir):
        dir += "/"

    cover = Image.open(dir + str(listPages[0]) + ".jpg")
    width, height = cover.size

    pdf = FPDF(unit = "pt", format = [width, height])

    for page in listPages:
        pdf.add_page()
        pdf.image(dir + str(page) + ".jpg", 0, 0)

    pdf.output(dir + pdfFileName + ".pdf", "F")

Tags: fromimageimportpdfdirpagecoverwidth
3条回答

到目前为止,将多个图像转换为PDF的最佳方法是纯粹使用PIL。它非常简单但功能强大:

from PIL import Image

im1 = Image.open("/Users/apple/Desktop/bbd.jpg")
im2 = Image.open("/Users/apple/Desktop/bbd1.jpg")
im3 = Image.open("/Users/apple/Desktop/bbd2.jpg")
im_list = [im2,im3]

pdf1_filename = "/Users/apple/Desktop/bbd1.pdf"

im1.save(pdf1_filename, "PDF" ,resolution=100.0, save_all=True, append_images=im_list)

只需将save_all设置为True,并将append_images设置为要添加的图像列表。

您可能会遇到AttributeError: 'JpegImageFile' object has no attribute 'encoderinfo'。解决方案在这里Error while saving multiple JPEGs as a multi-page PDF

注意:安装最新的PIL以确保save_all参数可用于PDF。

安装FPDF for Python

pip install fpdf

现在您可以使用相同的逻辑:

from fpdf import FPDF
pdf = FPDF()
# imagelist is the list with all image filenames
for image in imagelist:
    pdf.add_page()
    pdf.image(image,x,y,w,h)
pdf.output("yourfile.pdf", "F")

您可以找到更多信息at the tutorial pageofficial documentation

如果使用Python 3,则可以使用Python模块img2pdf

使用pip3 install img2pdf安装它,然后可以在脚本中使用它 使用import img2pdf

示例代码

import os
import img2pdf

with open("output.pdf", "wb") as f:
    f.write(img2pdf.convert([i for i in os.listdir('path/to/imageDir') if i.endswith(".jpg")]))

相关问题 更多 >

    热门问题