Всіх вітаю! Сьогодні ми розглянемо бібліотеку docx2pdf, яка дає змогу конвертувати .docx файли у файли з розширенням .pdf. Також у рамках цієї статті, ми стовримо програму з графічним інтерфейсом на flet, яка буде конвертувати Word-файли у PDF-формат.
Підготовка
Встновлення docx2pdf
Windows:
pip install docx2pdfMacOS:
pip3 install docx2pdfУ Linux ця бібліотека не буде працювати, бо вона вимагає встановленого Microsoft Word.
Встановлення flet
Windows:
pip install fletMacOS:
pip install fletТепер всі необхідні бібліотеки були встановлені.
Огляд функціналу docx2pdf
Конвертація .docx у .pdf
Спершу створюємо Word-файл (я створив його у папці проєкту):

За допомогою функції convert() ми можемо перетворити Word-файл файл у PDF-файл. Для цього нам треба лише викликати функцію, далі передати шлях до Word-файлу та майбутнього PDF-файл.
Ось приклад того, як перевторити наш Test.docx у PDF-файл:
import docx2pdf
docx2pdf.convert("Test.docx", "Test_converted.pdf")
print(f"The file is successfully converted into .pdf format.")100%|██████████| 1/1 [00:07<00:00, 7.87s/it]
The file is successfully converted into .pdf format.Ось, як бачимо, наш код успішно виконався. Але, де ж готовий PDF-файл? Якщо ми захочемо знайти його у папці нашого проєкту, то там його не буде. Насправді, програма успішно виконалася і PDF-файл створився, але він знаходиться у щляху користувача (C:\Users\User\Documents)
Якщо ж ми хочемо, щоб при стовренні він знаходився у папці проєкта, то треба зазначити шлях, де він повинен буде створитися.
Ось приклад, де ми записуємо шлях до нашого нового PDF-файлу:
import docx2pdf
pdf_file_path = "D:\\Hobbies\\Programming\\Python\\Channel posts\\WordPDFConversion\\Test_converted.pdf"
docx2pdf.convert("Test.docx", pdf_file_path)
print(f"The file is successfully converted into .pdf format.")100%|██████████| 1/1 [00:07<00:00, 7.87s/it]
The file is successfully converted into .pdf format.Тепер перевіримо папку з нашим проєктом у PyCharm:

Якщо ви спробуєте його відкрити, то все у вас вдасться і файл буде функціонувати коректно.
Створення десктопного додатку для конвертації файлів
Створення графічного інтерфейсу
У цій частині статті ми створимо невелиий декстопний додаток, який був би гарним, сучасним й використовував для конвертування файлів саме бібліотеку docx2pdf.
Так як бібліотеку flet ми вже завантажили раніше, то слід перейти одразу до справи. Отже, спершу імпортуємо бібліотеку flet:
import flet as ft
import docx2pdfНаступним кроком створимо функцію app(), яка буде наслідувати функціонал від класу Page бібліотеки flet:
def app(page: ft.Page):
passДана функція буде містити усі наші графічні елементи та функцію для кнопки.
Далі описуємо деякі загальні риси нашої програми, тобто визначаємо назву вікна, тему, розмір і т. д.
Ось загальні риси вікна нашої програми:
def app(page: ft.Page):
page.title = "Word to PDF Convertor"
page.theme_mode = ft.ThemeMode.DARK
page.window.width = 700
page.window.height = 600
page.vertical_alignment = ft.MainAxisAlignment.CENTER
page.horizontal_alignment = ft.CrossAxisAlignment.CENTERТут ми визначаємо назву вікна програми:
page.title = "Word to PDF Convertor"Встановлюємо темну тему у додатку:
page.theme_mode = ft.ThemeMode.DARKВстановлюємо ширину та висоту вікна:
page.window.width = 700
page.window.height = 600Розташовуємо елементи у вікні по центру, як вертикально, так і горизонтально:
page.vertical_alignment = ft.MainAxisAlignment.CENTER
page.horizontal_alignment = ft.CrossAxisAlignment.CENTERТепер додаємо графічні елементи (заголовок, поля вводу, функцію для кнопки, кнопку тощо):
welcome_text = ft.Text("Word to PDF Convertor", font_family="Halvetica",size=25)
word_file_way = ft.TextField(label="Word file directory", width=400)
pdf_file_way = ft.TextField(label="PDF file directory", width=400)
def convert_files(event):
pass
submit_button = ft.Button("Submit", on_click=convert_files)Створюємо заголовок програми зі шрифтом Halvetica та розміром 25 пікселей:
welcome_text = ft.Text("Word to PDF Convertor", font_family="Halvetica",size=25)Також створюємо поля вводу для зазначення шляху до обох файлів:
word_file_way = ft.TextField(label="Word file directory", width=400)
pdf_file_way = ft.TextField(label="PDF file directory", width=400)Оголошуємо функцію для кнопки (вона обов’язково повинна приймати параметр event) та надаємо ввдені дані для конвертування функції convert() бібліотеки:
def convert_files(event):
docx2pdf.convert(word_file_way.value, pdf_file_way.value)
word_file_way.value = ""
pdf_file_way.value = ""
page.update()Після конвертування присвоюємо полям пустий рядок та обов’язково оновлюємо сторінку.
Оголошуємо функцію, яка буде закривати програму:
def close_app(event):
page.window.close()Створюємо кнопку з назвою “Submit“ та прив’язкою до функції convert_files:
submit_button = ft.Button("Submit", on_click=convert_files)Створюємо кнопку з назвою “Close“ та прив’язкою до функції close_app:
close_button = ft.Button("Close", on_click=close_app)Розташовуємо кнопки "Submit" та "Close" в одному рядку та влаштовуємо їх по центру вікна:
button_row = ft.Row(
[
submit_button,
close_button
], alignment=ft.MainAxisAlignment.CENTER
)Тут за допомогою параметра alignment ми центруємо елементи посередині рядка.
Додаємо усі попередньо створені елементи на вікно:
page.add(welcome_text, word_file_way, pdf_file_way, button_row)Запускаємо програму:
ft.app(target=app)Все, наш графічний інтерфейс готовий до запуску. Ось повний код графічного інтерфесу програми:
import flet as ft
import docx2pdf
def app(page: ft.Page):
page.title = "Word to PDF Convertor"
page.theme_mode = ft.ThemeMode.DARK
page.window.width = 700
page.window.height = 600
page.vertical_alignment = ft.MainAxisAlignment.CENTER
page.horizontal_alignment = ft.CrossAxisAlignment.CENTER
welcome_text = ft.Text("Word to PDF Convertor", font_family="Halvetica",
size=25)
word_file_way = ft.TextField(label="Word file directory", width=400)
pdf_file_way = ft.TextField(label="PDF file directory", width=400)
def convert_files(event):
docx2pdf.convert(word_file_way.value, pdf_file_way.value)
word_file_way.value = ""
pdf_file_way.value = ""
page.update()
def close_app(event):
page.window.close()
submit_button = ft.Button("Submit", on_click=convert_files)
close_button = ft.Button("Close", on_click=close_app)
button_row = ft.Row(
[
submit_button,
close_button
], alignment=ft.MainAxisAlignment.CENTER
)
page.add(welcome_text, word_file_way, pdf_file_way, button_row)
ft.app(target=app)У результаті отримаємо таку програму:

Тепер пропоную протестувати роботу нашого додатку. Отже, вписуємо у поля вводу розташування .docx та .pdf файлів.
Ось скріншот:

Тепер після натискання на кнопку “Submit“ отримуємо PDF-файл у папці проєкту:

Як бачимо, файл дійсно конвертувався. Програма вдалася і ми створили те, що хотіли.
Висновок
У цій статті ми дізналися як перетворювати Word-файли у PDF-формат, як створювати сучасний графічний інтерфейс для декстопних додатків і як використовувати функції бібліотек docx2pdf та flet. Під час стоврення додатку ми навчилися додавати різні графічні елементи та задавати їм потрібне розтащування у вікні. Всім дякую за увагу!