Рубрики
Без рубрики

Как преобразовать PDF -файл в аудиокнигу

Повестка дня: Привет, добро пожаловать, поэтому сегодня мы собираемся сделать что -то, чтобы автоматизировать наше чтение ТА … Tagged с помощью Python, программирования, учебника.

Повестка дня:

Эй, добро пожаловать, поэтому сегодня мы собираемся сделать что -то, чтобы автоматизировать нашу задачу чтения с помощью Python. Мы собираемся создать программу GUI, чтобы выбрать PDF -файлы, а затем воспроизвести их в нашем программном обеспечении, что больше не чтение глаз будет прочитать ее для вас, и все, что вам нужно сделать, это сидеть сложа руки и наслаждаться.

Предварительные условия:

  • Счастливые отношения с основным питоном и tkinter Анкет

Да Вот и все, я объясню остальных 😉.

Анализ:

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

Прежде всего, мы собираемся создать окно и диалоговое окно, чтобы открыть желаемый файл PDF. Мы также создаем текстовое поле для отображения текстового контента PDF и кнопки Играть Чтобы начать играть в него как аудио.

Используются модули:

  • tkinter ( для работы с графическим интерфейсом)
  • Gtts (Для преобразования текста в речь)
  • Playsound (Для воспроизведения аудиофайла)
  • Pymupdf (Для чтения файлов PDF)

Прежде чем двигаться вперед, я хочу рассказать вам кое -что, что в большинстве онлайн -уроков вы найдете людей, использующих Pypdf2 Для работы с файлами PDF, но причина, по которой мы не используем его, заключается в том, что она не всегда работает, например, до даты, когда я пишу этот пост, если вы используете Pypdf2 Для чтения PDF, сгенерированного Google Like от Гугл документы , он не может читать из него текст.

Gtts означает Google Text to Speech Это библиотека Python, а также инструмент CLI для преобразования текста в речь.

Playsound Также библиотека Python для воспроизведения аудиофайлов, таких как .mp3 или .wav .

Мы используем Playsound Просто для воспроизведения аудиофайла, который будет создан с помощью Gtts , вы можете использовать любую библиотеку Python для этого, например, pydub или использовать ОС модуль для игры на Native Audio Player, установленном на терминале, Но я думаю, что это работает только на Mac OS X и Linux

Давайте сейчас погрузимся в код ✨

Шаг 1:

На этом этапе мы будем создавать наш графический интерфейс, поэтому откроем свой любимый редактор кода и создадим файл как main.py и импорт tkinter Анкет

tkinter Поставляется заранее установлен с помощью Python, поэтому не нужно устанавливать его из пип .

from tkinter import *
from tkinter import filedialog

# creating main window instance from Tk class defined in tkinter 
window = Tk()
window.title("convert pdf to audiobook")
window.geometry("500x500")   # setting default size of the window  

# creating text box for displaying pdf content
text_box = Text(window, height=30, width=60)
text_box.pack(pady=10)

# creating menu instance from Menu class
menu = Menu(window)
window.config(menu=menu)

# adding `File` tab into menu defined above
file_menu = Menu(menu, tearoff=False)
menu.add_cascade(label="File", menu=file_menu)

# adding drop-downs to `file_menu`
file_menu.add_command(label="Open")
file_menu.add_command(label="clear")
file_menu.add_separator()
file_menu.add_command(label="Exit")

# adding play button for playing audio
play_btn = Button(text="Play")
play_btn.pack(pady=20)

# for keeping window open till we don't close it manually
window.mainloop()

Теперь, если вы запустите его, вы увидите что -то подобное,

Шаг 2:

На этом шаге мы создадим функцию open_pdf Эта функция создаст диалог для выбора PDF -файла, а затем прочитав все текст и покажет внутри текстовое поле Создан ранее, тогда он будет использовать Gtts Для создания аудиофайла всего текста из текстовое поле Анкет

import fitz  # fitz is actually PyMuPDF
from gtts import gTTS


def open_pdf():

    # creating dialogue box

    open_file = filedialog.askopenfilename(
        initialdir="/Users/swayam/Downloads/",
        title="Open PDF file",
        filetypes=(
            ("PDF Files", "*.pdf"),
            ("All Files", "*.*")
        )
    )

    if open_file:

        #reading pdf file and creating instance of Document class from fitz
        doc = fitz.Document(open_file)

        # getting total number of pages
        total_pages = doc.page_count

        # looping through all the pages, collecting text from each page and showing it on text box
        for n in range(total_pages):
            page = doc.load_page(n)
            page_content = page.get_textpage()
            content = page_content.extractText()
            text_box.insert(END, content)

        # after whole pdf content is stored then retrieving it from textbox and storing it inside variable 
        text = text_box.get(1.0, END)

        # using gTTS to convert that text into audio and storing it inside file named as audio.mp3
        tts = gTTS(text, lang='en')
        tts.save("audio.mp3")

Вам нужно установить Gtts и Pymupdf , так что внутри вашего терминала бег PIP установить pymupdf и PIP установить gtts для их установки.

Как вы можете видеть выше, код является самостоятельным, но я все же хочу выделить некоторые моменты. Сначала посмотрите на линию с надписью text_box.insert (end, content) в основном Конец определяется внутри tkinter и он возвращает последний индекс, который означает, где находится конец файла, аналогично 1.0 означает начало текста.

Так что в основном, когда мы храним данные первой страницы внутри текстового поля, затем Индекс начального индекса После этого мы будем продолжать вставлять текст в конце предыдущего хранимого текста.

Шаг 3:

Теперь у нас есть функция, поэтому пришло время предоставить каждому виджету свою собственную функциональность, например нажатие кнопки и нажатие на меню, действительно что -то выполните.

Перейдите в код и добавьте Команда атрибут всем file_menu раскрытия и play_btn Как показано ниже

from playsound import playsound  

file_menu.add_command(label="Open", command=open_pdf)
file_menu.add_command(label="clear", command=lambda: text_box.delete(1.0, END))
file_menu.add_command(label="Exit", command=window.quit)

play_btn = Button(text="Play", command=lambda: playsound("audio.mp3"))

Playsound Требуется pyobjc в качестве зависимости для работы, поэтому вам нужно установить ее по PIP установить pyobjc

В основном функция, предоставленная в Команда Выполнится, нажимая на виджет. Для короткой функции, такой как ясно или выход Мы использовали Lambda функции.

window.quit Закроет окно и ясно Самоу объясните. Как audio.mp3 сохраняется Playsound ("audio.mp3") Будет воспроизвести его после того, как вы нажмете кнопку.

Так что, если вы следовали хорошо, то в конце концов ваш последний код будет немного похож на:

from tkinter import *
from tkinter import filedialog
import fitz
from gtts import gTTS
from playsound import playsound 

window = Tk()
window.title("convert pdf to audiobook")
window.geometry("500x500")


def open_pdf():
    open_file = filedialog.askopenfilename(
        initialdir="/Users/swayam/Downloads/",
        title="Open PDF file",
        filetypes=(
            ("PDF Files", "*.pdf"),
            ("All Files", "*.*")
        )
    )

    if open_file:
        doc = fitz.Document(open_file)
        total_pages = doc.page_count
        for n in range(total_pages):
            page = doc.load_page(n)
            page_content = page.get_textpage()
            content = page_content.extractText()
            text_box.insert(END, content)

        text = text_box.get(1.0, END)
        tts = gTTS(text, lang='en')
        tts.save("audio.mp3")


text_box = Text(window, height=30, width=60)
text_box.pack(pady=10)


menu = Menu(window)
window.config(menu=menu)

file_menu = Menu(menu, tearoff=False)
menu.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="Open", command=open_pdf)
file_menu.add_command(label="clear", command=lambda: text_box.delete(1.0, END))
file_menu.add_separator()
file_menu.add_command(label="Exit", command=window.quit)

play_btn = Button(text="Play", command=lambda: playsound("audio.mp3"))
play_btn.pack(pady=20)

window.mainloop()

Давай проверим это

Теперь пришло время запустить наш код и проверить, работает ли все или нет, возьмите образец файла PDF с некоторым текстом и откройте его.

Yayyyyyy …… 🎉 🥳, Мы сделали это, ребята

Мы только что создали наш собственный PDF для аудиокниги -конвертора, теперь, если вы хотите сделать несколько шагов дальше, я рекомендую вам прочитать Gtts Официальная документация также, если кто -то хочет, то вы можете преобразовать этот скрипт Python в exe подать и поделиться этим со своими друзьями, чтобы они тоже могли повеселиться

Давайте сохранить Преобразование сценариев Python в файлы .exe Для следующего урока 😅.

Что дальше !

Если вы все еще читаете, обязательно следуйте за мной Twitter Поскольку я делюсь там классными проектами и обновлениями И да, не забывайте, что у меня есть несколько захватывающих вещей каждые выходные. Увидимся в следующий раз и оставайтесь в безопасности ^^ 🌻

Оригинал: “https://dev.to/_s_w_a_y_a_m_/how-to-convert-pdf-file-into-an-audiobook-5b62”