

(The PDFMiner project is no longer maintained as of 2020.)įirst, you need to install it: pip install pdfminer.sixĬompared with PyPDF2, PDFMiner’s scope is much more limited, it really focuses only on extracting the text from the source information of a pdf file. We are going to use pdfminer.six, which is a community-maintained fork of the original PDFMiner library. For that, we need to use a different library, PDFMiner. Now we can read and write pdf files, but there is one crucial functionality we still need: converting the contents to a text file. These are all the classes and methods that we are going to use, see PyPDF2 Documentation for information on additional functionalities. A simple way of creating a file object is by using Python’s built-in open method: output_filename = 'pages_we_want_to_save.pdf' with open(output_filename, 'wb') as output: writer.write(output) The method requires one parameter, a file object, which means simply entering the file path won’t work. For example, to add a certain page from our input pdf: my_page = reader.getPage(7) writer.addPage(my_page)Īnd finally, a PdfFileWriter object has a write method that saves the contents in a file. In order to add a page to the file to be created, use the addPage method, which requires a PageObject object as a parameter. The writer object will keep track of the pdf file we want to create. This class has no parameters, you can just create it like so: writer = PyPDF2.PdfFileWriter() Next thing we need is a PdfFileWriter object. This is the main reason why I also used the other library, PDFMiner, in the project. However, even the official documentation says this on the method: “This works well for some PDF files, but poorly for others, depending on the generator used.” Which is not exactly reassuring, and in my experience, extractText did not work properly, it left out first and last lines of pages. For example, to get the text on the 7th page (remember, zero-index) of a pdf, you would first create a PageObject from the PdfFileReader, and call this method: reader.getPage(7-1).extractText() We are not going to heavily utilise the PageObject class, one extra thing you could consider doing is the extractText method, which converts the contents of a page to a string variable. Be careful, PageObjects are in a list, so the method uses a zero-based index. Perhaps the most important method is getPage(page_num) which returns one page of the file as a separate PageObject. You can also get the total number of pages with reader.numPages. For example, reader.documentInfo is an attribute that contains the document information dictionary in this format: You can get a number of general information about your document with this reader object. The parameter is the path to a pdf document we want to work with. The first object we need is a PdfFileReader: reader = PyPDF2.PdfFileReader('Complete_Works_Lovecraft.pdf') PyPDF2Īs a first step, install the package: pip install PyPDF2

For more information on this project, please refer to my GitHub repo. Then, in the second part, we are going to work on one project, which is about splitting a 708-page long pdf file into separate smaller files, extracting the text information, cleaning it, and then exporting to easily readable text files. We will discuss the different classes and methods we need. As their name suggests, they are libraries written specifically to work with pdf files. In the first part, we are going to have a look at two Python libraries, PyPDF2 and PDFMiner. There is a pdf, there is text in it, we want the text out, and I am going to show you how to do that using Python. I don’t think there is much room for creativity when it comes to writing the intro paragraph for a post about extracting text from a pdf file.
