PDF в IMG в PDF все сделано в памяти - PullRequest
0 голосов
/ 12 июня 2018

Чтобы удалить конфиденциальный контент из PDF-файла, я преобразовываю его в изображение и снова в PDF-файл.

Я могу сделать это при сохранении изображения в формате JPEG, однако в конечном итоге мне бы хотелось адаптироватьсямой код, так что файл находится в памяти все время.PDF в памяти -> JPEG в памяти -> PDF в памяти.У меня проблемы с промежуточным шагом.

from pdf2image import convert_from_path, convert_from_bytes
import img2pdf

images = convert_from_path('testing.pdf', fmt='jpeg')
image = images[0]

# opening from filename
with open("output/output.pdf","wb") as f:
    f.write(img2pdf.convert(image.tobytes())) 

В последней строке я получаю сообщение об ошибке:

ImageOpenError: cannot read input image (not jpeg2000). PIL: error reading image: cannot identify image file <_io.BytesIO object at 0x1040cc8f0>

Я не уверен, как преобразовать это изображение в строку, котораяimg2pdf ищет.

1 Ответ

0 голосов
/ 03 июня 2019

Модуль pdf2image извлечет изображения как изображения подушек.И в соответствии с документацией Pillow tobytes () : «Этот метод возвращает необработанные данные изображения из внутреннего хранилища».Какое-то растровое представление.

Чтобы ваш код работал, используйте модуль BytesIO, например:

# opening from filename
import io
with open("output/output.pdf","wb") as f, io.BytesIO() as output:
    image.save(output, format='jpg')
    f.write(img2pdf.convert(output.getvalue())) 
...