Как я могу преобразовать все файлы JPG в папке в PDF-файлы и объединить их?

У меня есть несколько файлов JPG 1924 × 2972 ​​в папке (/img/). Я хочу 1) преобразовать их в PDF-файлы и 2) объединить их в один PDF-файл. Но я не успешен. Я новичок в питоне. Пожалуйста, дайте мне знать, как я могу продолжить.

from PIL import Image
import glob
from fpdf import FPDF #
imagelist = []
for filename in glob.glob('img/*.jpg'): #assuming jpg
    im=Image.open(filename)
    imagelist.append(im)

pdf = FPDF()
# imagelist is the list with all image filenames
for image in imagelist:
    pdf.add_page()
    pdf.image(image, 10,210,297)
pdf.output("yourfile.pdf", "F")

Ошибка:

       File "<ipython-input-39-9fb5b6258b5e>", line 1, in <module>
    pdf.image(image, 10,210,297)

  File "/Users/xyz/anaconda/lib/python3.6/site-packages/fpdf/fpdf.py", line 150, in wrapper
    return fn(self, *args, **kwargs)

  File "/Users/xyz/anaconda/lib/python3.6/site-packages/fpdf/fpdf.py", line 960, in image
    if not name in self.images:

TypeError: unhashable type: 'JpegImageFile'

2 ответа

Решение

Во втором цикле вам нужно указать путь к каждому jpg:

pdf.image(image, 10,210,297)

Изменить: кроме того, я думаю, что вам просто нужен путь к каждому изображению (а не открывать каждое изображение с помощью Image.open, Попробуйте следующее:

import glob
from fpdf import FPDF #
imagelist = glob.glob('img/*.jpg')

pdf = FPDF()
# imagelist is the list with all image filenames
for image in imagelist:
    pdf.add_page()
    pdf.image(image, 10,210,297)
pdf.output("yourfile.pdf", "F")

я решаю эту проблему с помощью fpdf2

      pip install fpdf2
      from fpdf import FPDF

pdf = FPDF(unit="pt", format="A4")
pdf.image(#path image , x, y, width, height)

Первоначально я столкнулся с этой проблемой, потому что только что установил fpdf, который эта библиотека, вероятно, больше не поддерживает.

Другие вопросы по тегам