• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Заметка Конвертация файлов Word в PDF с помощью Python

Темы, которые НЕ подходят по объему под префикс "Статья"
Не знаю, как у вас, а у меня на работе иногда возникала проблема в конвертировании файлов из формата docx в формат pdf, чтобы в последующем разместить эти файлы на сайте. А файлов, иногда, бывало довольно много, потому, требовалось каждый открыть и сохранить в нужный формат. В какой-то момент времени мне это немного надоело и я стал искать способ, как бы автоматизировать данный процесс. И выход нашелся. Я написал небольшой скрипт на python, который конвертировал файлы в pdf автоматом. То есть, выполнял работу за меня.

В общем, это небольшой пост, посвящённый автоматизации )

000.png


Что потребуется?

Для работы скрипта нужно установить модуль docx2pdf. Потому, отрываем терминал и выполняем команду:

pip install docx2pdf


Пишем функцию конвертации

Для того, чтобы конвертировать файл из формата Microsoft Word в PDF, достаточно одной небольшой функции. На входе она будет принимать директорию с файлами docx и конвертировать их по очереди. Впрочем, для того, чтобы исключить попадание конвертеру файлов, расширение которых отлично от docx, сделаем небольшое условие, которое будет проверять файл на необходимое нам расширение. Если расширение другое, то файл будет пропущен, а скрипт продолжит свое выполнение, а не упадет в обмороке.

Вот сама функция, которая нам требуется:

Python:
def file_convert_docx_pdf(dirs):
    file_in_dir = os.listdir(dirs)

    if not os.path.isdir(f'{dirs}\\convert_pdf'):
        os.mkdir(f'{dirs}\\convert_pdf')

    for file in file_in_dir:
        if file.endswith('.docx'):
            file_k = f'{file.split(".")[0].replace(".", "_")}.pdf'
            convert(f'{dirs}\\{file}', f'{dirs}\\convert_pdf\\{file_k}')
        else:
            continue

Сканируем директорию и получаем список файлов. Дальше проверяем, есть ли папка, в которую надо будет складывать конвертированные файлы. Если такой папки нет – она будет создана. Ну, а потом перебираем в цикле список со сканированными файлами, проверяем их расширение и если расширение docx, формируем новое имя файла, попутно заменяя все точки в имени на «_». Это нужно для того, чтобы скрипт корректно сохранял файл. Если в имени файла попадается точка, то расширение файла сразу же отбрасывается. Ну и дальше конвертеру передается путь к файлу и имя файла для конвертирования, и путь к файлу, и имя файла для сохранения.

screenshot1.png

Пример работы скрипта

Ниже можно посмотреть результат работы скрипта:

screenshot2.png

Как можно заметить, в папке находится один файл в формате doc. Он пропускается, таким образом, из 23 файлов конвертированы только 22.

Вот в принципе и все. Надо отметить, что модуль docx2pdf, как следует из его названия не работает с файлами doc. А потому их, перед тем, как конвертировать нужно так же пересохранить в нужном формате. И тут выход так же нашелся. Но, об этом в следующий раз.

А сейчас, вот полный код скрипта:

Python:
import os

from docx2pdf import convert


def file_convert_docx_pdf(dirs):
    file_in_dir = os.listdir(dirs)

    if not os.path.isdir(f'{dirs}\\convert_pdf'):
        os.mkdir(f'{dirs}\\convert_pdf')

    for file in file_in_dir:
        if file.endswith('.docx'):
            file_k = f'{file.split(".")[0].replace(".", "_")}.pdf'
            convert(f'{dirs}\\{file}', f'{dirs}\\convert_pdf\\{file_k}')
        else:
            continue


def main():
    dirs = input('Введите папку для сканирования: >> ')
    file_convert_docx_pdf(dirs)
    print(f'\n[+] - Конвертация завершена...')


if __name__ == "__main__":
    main()

Надеюсь, что данный скрипт будет кому-то полезен в работе. Спасибо за внимание
 
Последнее редактирование модератором:

semen_rod

One Level
17.02.2022
4
2
BIT
0
Очень полезно) А есть возможность рассмотреть тему конвертации каждой страницы сайта в пдф?
Извиняюсь что не сразу отписался. Захожу в темы с тг, как там выкладывают посты
 

Johan Van

Green Team
13.06.2020
352
662
BIT
167
Очень полезно) А есть возможность рассмотреть тему конвертации каждой страницы сайта в пдф?
Извиняюсь что не сразу отписался. Захожу в темы с тг, как там выкладывают посты

Добрый день. Почти забыл про ваш вопрос, но, вот наткнулся. Я нашел неплохую библиотеку которая конвертирует страницы в pdf. Конечно же, она не чистит их от рекламных блоков и прочего, то есть, сохраняет как есть. Вот ссылка на GitHub: GitHub - JazzCore/python-pdfkit: Wkhtmltopdf python wrapper to convert html to pdf. В принципе, там все рассмотрено достаточно подробно и не выглядит сложным ))
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!