Работа с PDF: генерация, чтение, объединение

Почему Python и PDF — мощный дуэт? 🐍📄

PDF — это универсальный формат для документов, и Python позволяет легко с ним работать. Представьте: автоматизация отчетов, извлечение данных или даже создание собственных PDF-документов с нуля! Давайте разбираться, как это сделать.


Установка необходимых библиотек

Для работы с PDF в Python нам понадобятся три ключевые библиотеки:

pip install PyPDF2 reportlab fpdf
  • PyPDF2 — чтение, объединение и разделение PDF.
  • reportlab — создание PDF с нуля (более продвинутый функционал).
  • fpdf — простой способ генерации PDF (альтернатива reportlab).

Генерация PDF с нуля 🏗️

Вариант 1: Просто и быстро с FPDF

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt="Привет, это твой первый PDF!", ln=True, align='C')
pdf.output("simple_document.pdf")

Что происходит?
1. Создаем объект FPDF.
2. Добавляем страницу.
3. Устанавливаем шрифт и размер.
4. Добавляем текст с помощью cell().
5. Сохраняем в файл.


Вариант 2: Гибкость с ReportLab

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

c = canvas.Canvas("advanced_document.pdf", pagesize=A4)
c.setFont("Helvetica", 14)
c.drawString(100, 750, "Это PDF создан через ReportLab!")
c.drawImage("logo.png", 50, 650, width=100, height=50)
c.save()

Плюсы ReportLab:
✅ Поддержка изображений, таблиц, графиков.
✅ Точный контроль над элементами (координаты X, Y).
✅ Возможность создания сложных макетов.


Чтение PDF и извлечение текста 🔍

Допустим, у вас есть PDF-отчет, и нужно извлечь из него данные. Вот как это сделать:

import PyPDF2

with open("example.pdf", "rb") as file:
    reader = PyPDF2.PdfReader(file)
    num_pages = len(reader.pages)
    print(f"Всего страниц: {num_pages}")

    # Извлекаем текст с первой страницы
    first_page = reader.pages[0]
    text = first_page.extract_text()
    print(text)

Важно:
⚠️ Не все PDF поддерживают извлечение текста (например, сканированные документы).
⚠️ Для сложных случаев используйте pdfminer.six или pymupdf.


Объединение нескольких PDF в один 🔗

Часто нужно собрать несколько отчетов в один файл. Вот простой способ:

from PyPDF2 import PdfMerger

merger = PdfMerger()

files = ["doc1.pdf", "doc2.pdf", "doc3.pdf"]
for file in files:
    merger.append(file)

merger.write("combined.pdf")
merger.close()

Лайфхак:
Можно выбрать конкретные страницы для объединения:

merger.append("doc1.pdf", pages=(0, 3))  # только первые 4 страницы

Разделение PDF на части ✂️

Нужно извлечь определенные страницы? Легко!

from PyPDF2 import PdfReader, PdfWriter

reader = PdfReader("big_file.pdf")
writer = PdfWriter()

# Добавляем только страницы 1, 3 и 5
for page_num in [0, 2, 4]:  # Индексы начинаются с 0!
    writer.add_page(reader.pages[page_num])

with open("extracted_pages.pdf", "wb") as output_file:
    writer.write(output_file)

Парсинг PDF-таблиц в Pandas 🐼

Если в PDF есть таблицы, их можно превратить в DataFrame:

import camelot

tables = camelot.read_pdf("data.pdf", pages="1")
print(tables[0].df)  # Первая таблица как DataFrame

Совет:
Для сложных таблиц попробуйте pdfplumber или tabula-py.


Где применять эти навыки? 🚀

  1. Автоматизация отчетов — генерируйте еженедельные PDF-отчеты.
  2. Парсинг данных — извлекайте таблицы из финансовых документов.
  3. Объединение сканов — создавайте единые документы из разрозненных файлов.

Как говорит Данила Бежин в своих уроках: «Python — это ваш цифровой швейцарский нож для работы с документами». Посмотрите его разборы на YouTube-канале для вдохновения!


Что дальше?

Попробуйте создать PDF-резюме или автоматизировать выгрузку отчетов. Экспериментируйте с графиками (reportlab + matplotlib) или защитой PDF (PyPDF2 + пароли).

Ваш код — ваши возможности!

Скрыть рекламу навсегда

📘 VK Видео — обучение без ограничений

Все уроки доступны без VPN, без блокировок и зависаний.

Можно смотреть с телефона, планшета или компьютера — в любое время.

▶️ Смотреть на VK Видео