Build your audiobook from any PDF with Python

Did you know that you can build your audiobook with Python from any PDF? Sounds cool, isn’t it?
In this quick tutorial, I will show you how to build an audiobook with Python.

In our example, we will be using PyPDF2 and pyttsx3.

PyPDF2 is a pure-Python library built as a PDF toolkit. It is capable of:

  • extracting document information (title, author, …)
  • splitting documents page by page
  • merging documents page by page
  • cropping pages
  • merging multiple pages into a single page
  • encrypting and decrypting PDF files
  • and more!

By being Pure-Python, it should run on any Python platform without any dependencies on external libraries. It can also work entirely on StringIO objects rather than file streams, allowing for PDF manipulation in memory. It is therefore a useful tool for websites that manage or manipulate PDFs.

Pyttsx3 is a text-to-speech conversion library in Python. Unlike alternative libraries, it works offline, and is compatible with both Python 2 and 3.

Let’s jump to the code:

First we need to import our dependencies:

<span>import</span> <span>PyPDF2</span>
<span>import</span> <span>pyttsx3</span>
<span>import</span> <span>PyPDF2</span>
<span>import</span> <span>pyttsx3</span>
import PyPDF2 import pyttsx3

Enter fullscreen mode Exit fullscreen mode

Then we need to open our pdf

<span>pdf_file</span> <span>=</span> <span>open</span><span>(</span><span>'</span><span>test.pdf</span><span>'</span><span>,</span> <span>'</span><span>rb</span><span>'</span><span>)</span>
<span>pdf_file</span> <span>=</span>  <span>open</span><span>(</span><span>'</span><span>test.pdf</span><span>'</span><span>,</span> <span>'</span><span>rb</span><span>'</span><span>)</span>
pdf_file = open('test.pdf', 'rb')

Enter fullscreen mode Exit fullscreen mode

where mode='rb' is used for open the file in binary format for reading.

We define PDF file reader:

<span>pdf_read</span> <span>=</span> <span>PyPDF2</span><span>.</span><span>PdfFileReader</span><span>(</span><span>pdf_file</span><span>)</span>
<span>pdf_read</span> <span>=</span> <span>PyPDF2</span><span>.</span><span>PdfFileReader</span><span>(</span><span>pdf_file</span><span>)</span>
pdf_read = PyPDF2.PdfFileReader(pdf_file)

Enter fullscreen mode Exit fullscreen mode

Then we need to give number of pages in PDF file:

<span>num_pages</span> <span>=</span> <span>pdf_read</span><span>.</span><span>numPages</span>
<span>num_pages</span> <span>=</span> <span>pdf_read</span><span>.</span><span>numPages</span>
num_pages = pdf_read.numPages

Enter fullscreen mode Exit fullscreen mode

Then we define our init and we also can do a print :

<span>engine</span> <span>=</span> <span>pyttsx3</span><span>.</span><span>init</span><span>()</span>
<span>print</span><span>(</span><span>'</span><span>Read PDF</span><span>'</span><span>)</span>
<span>engine</span> <span>=</span> <span>pyttsx3</span><span>.</span><span>init</span><span>()</span>
<span>print</span><span>(</span><span>'</span><span>Read PDF</span><span>'</span><span>)</span>
engine = pyttsx3.init() print('Read PDF')

Enter fullscreen mode Exit fullscreen mode

After that, we define our loop that will read all pages one by one:

<span>for</span> <span>n</span> <span>in</span> <span>range</span><span>(</span><span>0</span><span>,</span> <span>num_pages</span><span>):</span>
<span>page</span> <span>=</span> <span>pdf_read</span><span>.</span><span>getPage</span><span>(</span><span>n</span><span>)</span>
<span>text</span> <span>=</span> <span>page</span><span>.</span><span>extractText</span><span>()</span>
<span>x</span> <span>=</span> <span>n</span> <span>+</span> <span>1</span>
<span>print</span><span>(</span><span>f</span><span>"</span><span>Reading page </span><span>{</span><span>x</span><span>}</span><span>/</span><span>{</span><span>num_pages</span><span>}</span><span>.</span><span>"</span><span>)</span>
<span>engine</span><span>.</span><span>say</span><span>(</span><span>text</span><span>)</span>
<span>engine</span><span>.</span><span>save_to_file</span><span>(</span><span>text</span><span>,</span> <span>'</span><span>book.mp3</span><span>'</span><span>)</span>
<span>engine</span><span>.</span><span>runAndWait</span><span>()</span>
<span>for</span> <span>n</span> <span>in</span> <span>range</span><span>(</span><span>0</span><span>,</span> <span>num_pages</span><span>):</span>
    <span>page</span> <span>=</span> <span>pdf_read</span><span>.</span><span>getPage</span><span>(</span><span>n</span><span>)</span>
    <span>text</span> <span>=</span> <span>page</span><span>.</span><span>extractText</span><span>()</span>
    <span>x</span> <span>=</span> <span>n</span> <span>+</span> <span>1</span>
    <span>print</span><span>(</span><span>f</span><span>"</span><span>Reading page </span><span>{</span><span>x</span><span>}</span><span>/</span><span>{</span><span>num_pages</span><span>}</span><span>.</span><span>"</span><span>)</span>
    <span>engine</span><span>.</span><span>say</span><span>(</span><span>text</span><span>)</span>
    <span>engine</span><span>.</span><span>save_to_file</span><span>(</span><span>text</span><span>,</span> <span>'</span><span>book.mp3</span><span>'</span><span>)</span>
    <span>engine</span><span>.</span><span>runAndWait</span><span>()</span>
for n in range(0, num_pages): page = pdf_read.getPage(n) text = page.extractText() x = n + 1 print(f"Reading page {x}/{num_pages}.") engine.say(text) engine.save_to_file(text, 'book.mp3') engine.runAndWait()

Enter fullscreen mode Exit fullscreen mode

This part of the code retrieves a page by the number from this PDF file, extracts text from the page, and reads text from the page. Also we save to mp3 file.

Thank you all.

原文链接:Build your audiobook from any PDF with Python

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
The best hearts are always the bravest.
心灵最高尚的人也总是最勇敢的人
评论 抢沙发

请登录后发表评论

    暂无评论内容