Ошибка img2pdf pyhon

Рейтинг: 1Ответов: 2Опубликовано: 31.01.2023

Есть файлы типа 1.ipg, 2.ipg, rtrrt.jpg, ghthh.jpg. Их нужно объединить в pdf файл.

Соединение файлов должно быть обязательно 1.ipg, 2.ipg, остальные не важно. Код ниже работает, но на некоторых выдает ошибку

import img2pdf
import glob
import os

dir = os.path.abspath(os.curdir)
print(dir)
dir_new = dir.split('\\')[-1]
print(dir_new)

with open(dir_new +".pdf", "wb") as f:
     f.write(img2pdf.convert(glob.glob("*.jpg")),  rotation=img2pdf.Rotation.ifvalid)

Текст ошибки:

Traceback (most recent call last):
  File "C:/pyserver/1.py", line 13, in <module>
    f.write(img2pdf.convert(glob.glob("*.jpg")),  rotation=img2pdf.Rotation.ifvalid)
TypeError: write() takes no keyword arguments

Ответы

▲ 0Принят

В коде происходит ошибка, потому что метод write() не принимает именованные аргументы, такие как rotation.

Чтобы устранить ошибку, можно преобразовать в PDF до вызова write(), вот так:

with open(dir_new +".pdf", "wb") as f:
pdf_bytes = img2pdf.convert(glob.glob("*.jpg"), rotation=img2pdf.Rotation.ifvalid)
f.write(pdf_bytes)
▲ 0

Причина ошибки в том, что закрывающая скобка стоит не там:

# Должно быть
f.write(img2pdf.convert(glob.glob("*.jpg"), rotation=img2pdf.Rotation.ifvalid))
# Было
f.write(img2pdf.convert(glob.glob("*.jpg")),  rotation=img2pdf.Rotation.ifvalid)

Получается, что вы передаете параметр rotation (поворот) в метод write, а не в метод convert. Метод записи в файл ни о каком повороте не знает, он умеет только записывать байты в файл.

Чтобы не путаться со скобками, лучше разделить операцию на отдельные строки:

pdf_bytes = img2pdf.convert(glob.glob("*.jpg"), rotation=img2pdf.Rotation.ifvalid)
f.write(pdf_bytes)

или даже так:

files = glob.glob("*.jpg")
pdf_bytes = img2pdf.convert(files, rotation=img2pdf.Rotation.ifvalid)
f.write(pdf_bytes)