Повестка дня:
Эй, добро пожаловать, поэтому сегодня мы собираемся сделать что -то, чтобы автоматизировать нашу задачу чтения с помощью 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”