WedX - журнал о программировании и компьютерных науках

несколько изображений tiff в pdf с помощью python

У меня есть список файлов изображений, и я хотел бы создать один файл 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])

25.12.2019

Ответы:


1

Возможным способом взлома может быть запуск через ImageMagick convert:

import os
os.system('convert '+' '.join(image_list)+' output.pdf')
25.12.2019
  • Спасибо за ваш ответ! Конечная цель — автономный исполняемый файл, сгенерированный с помощью pyinstaller --onefile. Таким образом, файл .exe может быть запущен кем угодно. Ваше решение работает, но я бы предпочел решение без запуска командной строки. Хотел бы я найти его. 25.12.2019
  • Попробуйте Python Wand. Хотя для этого требуется ImageMagick. См. docs.wand-py.org/en/0.5.7. 25.12.2019
  • В этом случае я бы предпочел создать один pdf-файл для каждого tiff-файла и объединить pdf-файлы, поскольку при совместном использовании программы не требуется устанавливать ImageMagick на каждый компьютер. 26.12.2019

  • 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')
    
    26.12.2019
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]