Друкарня від WE.UA

Створюємо програму для конвертації Word-файлів у PDF-формат за допомогою бібліотек docx2pdf та flet

Всіх вітаю! Сьогодні ми розглянемо бібліотеку docx2pdf, яка дає змогу конвертувати .docx файли у файли з розширенням .pdf. Також у рамках цієї статті, ми стовримо програму з графічним інтерфейсом на flet, яка буде конвертувати Word-файли у PDF-формат.

Підготовка

Встновлення docx2pdf

Windows:

pip install docx2pdf

MacOS:

pip3 install docx2pdf

У Linux ця бібліотека не буде працювати, бо вона вимагає встановленого Microsoft Word.

Встановлення flet

Windows:

pip install flet

MacOS:

pip3 install flet

Тепер всі необхідні бібліотеки були встановлені.

Огляд функціналу docx2pdf

Конвертація .docx у .pdf

Спершу створюємо Word-файл (я створив його у папці проєкту):

Створили 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:

Ось і PDF файл у правильній директорії

Якщо ви спробуєте його відкрити, то все у вас вдасться і файл буде функціонувати коректно.

Створення десктопного додатку для конвертації файлів

Створення графічного інтерфейсу

У цій частині статті ми створимо невелиий декстопний додаток, який був би гарним, сучасним й використовував для конвертування файлів саме бібліотеку 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. Під час стоврення додатку ми навчилися додавати різні графічні елементи та задавати їм потрібне розтащування у вікні. Всім дякую за увагу!

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Magnifique numérique
Magnifique numérique@nocturnal_reader we.ua/nocturnal_reader

Нічний читач

53Довгочити
604Прочитання
17Підписники
Підтримати
На Друкарні з 14 липня

Більше від автора

  • Метод split() у Python

    Всіх вітаю! Сьогодні ми розглянемо метод split() у Python та побачимо, як використовувати її на прикладах.

    Теми цього довгочиту:

    Програмування
  • Створюємо стовпчикові графіки за допомогою plotly

    Всіх вітаю! У цій статті пропоную вам зануритися у графіки та візуалізацію на Python за допомогою plotly. На цей раз ми втілимо графік прослуховувань різних реп виконавців за місяць та графік з оцінками деяких альбомів за сайтом AOTY.

    Теми цього довгочиту:

    Програмування
  • Методи lower(), upper(), islower() та isupper() у Python

    Всіх вітаю! У цій невеличкій статті ми познайомимося із одразу чотирма методами для зміни регістру рядків у Python. Конкретно сьогодні ми ознайомимося із методами lower(), upper(), islower() та isupper().

    Теми цього довгочиту:

    Програмування

Це також може зацікавити:

  • Stack та Heap

    В JVM використовуються дві структури для зберігання інформації в пам’яті: Stack та Heap. Вони мають полярну філософію і ми не можемо обійтись без жодної із них. У цьому пості я намагатимусь обширно опрацювати причини використання обох структур та їхні особливості.

    Теми цього довгочиту:

    Java
  • Порівняння AWS Activate, хмарної програми Google та Microsoft для стартапів

    Якщо ви запускаєте стартап, то, напевно, замислювалися над тим, де розмістити своє рішення. Важливо розуміти, що додаток складається з рядків коду, які повинні працювати на сервері, надаючи користувачам доступ до нього.

    Теми цього довгочиту:

    Devops

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити:

  • Stack та Heap

    В JVM використовуються дві структури для зберігання інформації в пам’яті: Stack та Heap. Вони мають полярну філософію і ми не можемо обійтись без жодної із них. У цьому пості я намагатимусь обширно опрацювати причини використання обох структур та їхні особливості.

    Теми цього довгочиту:

    Java
  • Порівняння AWS Activate, хмарної програми Google та Microsoft для стартапів

    Якщо ви запускаєте стартап, то, напевно, замислювалися над тим, де розмістити своє рішення. Важливо розуміти, що додаток складається з рядків коду, які повинні працювати на сервері, надаючи користувачам доступ до нього.

    Теми цього довгочиту:

    Devops