CodeGym /Courses /Python SELF EN /Other Libraries for Working with PDFs in Python

Other Libraries for Working with PDFs in Python

Python SELF EN
Level 43 , Lesson 1
Available

1. Getting to Know PDFPlumber

Extracting Tables and Complex Structures with PDFPlumber

PDFPlumber is perfect for extracting data from PDFs, especially tables and complex structures like columns. It can recognize and extract data that is hard to get with PyPDF2.

Installing PDFPlumber

Python

pip install pdfplumber

Extracting Tables Using PDFPlumber

Python

import pdfplumber

with pdfplumber.open("sample_with_table.pdf") as pdf:
    for page in pdf.pages:
        table = page.extract_table()
        if table:
            for row in table:
                print(row)

This code extracts tables from each page of the PDF, which is useful for processing financial and analytical reports where tables represent key data.

2. Getting to Know ReportLab

Creating PDF Reports with ReportLab

If you want to create PDFs from scratch, like for reports or automated documents, the ReportLab library offers flexible options for building PDFs with text, tables, images, and graphs.

Installing ReportLab

Python

pip install reportlab

Creating a Simple PDF Document

Python

from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas

# Creating the PDF
pdf_file = canvas.Canvas("generated_report.pdf", pagesize=A4)
width, height = A4

# Adding a title
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Sales Report")

# Adding text
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "This report contains sales data for the last month.")

# Saving the PDF
pdf_file.showPage()
pdf_file.save()

This code creates a PDF with a title and some text. It also allows you to add logos, images, and other design elements.

Creating a Table in a PDF with ReportLab

Python

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle

# Data for the table
data = [
    ["Month", "Sales"],
    ["January", "200"],
    ["February", "300"],
    ["March", "250"]
]

# Creating a PDF with a table
pdf_file = SimpleDocTemplate("sales_report.pdf", pagesize=A4)
table = Table(data)
table.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
    ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
    ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
    ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
    ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
]))

# Building the PDF
elements = [table]
pdf_file.build(elements)

This code creates a table and saves it to a PDF. With ReportLab, you can also add styles, change colors, font sizes, and format text.

3. Back to PyPDF2

Why PyPDF2?

As you know, PDF documents are pretty much the standard for all sorts of documentation, from reports to white papers. But when it comes to automation, working with PDFs in Python can be a real headache. PyPDF2 helps you out of this mess: it allows you to extract text, merge and split pages, and do much more. And using it is actually fun. It’s like a good cup of morning coffee for a coder, but instead of energizing you, it calms you down!

Let’s take a quick look at the basic functionality PyPDF2 offers. This will prep you for more complex tasks because jumping in all at once can get confusing real fast.

Importing and a Basic Example

The first thing we need to do is import the library. Think of it like the classic `import this`, but now it’ll perform some specific tasks for us.

Python

import PyPDF2

As a simple example, let’s try opening a PDF and reading its content.

Python

# Opening a file in binary read mode
with open('example.pdf', 'rb') as pdf_file:
    # Creating a PDFReader object
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    # Extracting text from the first page
    page = pdf_reader.pages[0]
    text = page.extract_text()
    print(text)

This code does everything you need to get started: it opens a PDF, extracts text from the first page, and prints it. Simple and elegant.

Overview of PyPDF2 Functionality

PyPDF2 offers a bunch of functions for working with PDFs:

  • Text extraction: we’ve already covered that.
  • PDF merging: creating a new PDF by merging several existing ones.
  • Page splitting: pulling out specific pages and saving them as separate files.
  • Adding annotations and comments: now that’s some high-level stuff!

At this stage, you should have a general idea of how PyPDF2 works and what it can do. Of course, mastering it in one session is impossible, but step by step, we’re going to explore what this library has to offer.

Feedback and Common Pitfalls

Often, code doesn’t work right away, and every learning process turns into a “hunt the bug” game. The most common mistake when using PyPDF2 is an incorrect file path. Make sure your PDF is in the same directory as your script, or provide the full path. Also, don’t forget to open files in binary mode ('rb'), as this helps avoid encoding issues. As one wise programmer once said, "Bugs aren’t errors in your code; they’re just unexpected features."

1
Task
Python SELF EN, level 43, lesson 1
Locked
Extracting Text Using PDFPlumber Library
Extracting Text Using PDFPlumber Library
2
Task
Python SELF EN, level 43, lesson 1
Locked
Extracting Tables from PDFs with PDFPlumber
Extracting Tables from PDFs with PDFPlumber
3
Task
Python SELF EN, level 43, lesson 1
Locked
Creating a PDF Report with a Table and Header using ReportLab
Creating a PDF Report with a Table and Header using ReportLab
4
Task
Python SELF EN, level 43, lesson 1
Locked
Combined Usage of PDFPlumber and ReportLab
Combined Usage of PDFPlumber and ReportLab
Comments
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION