Работа с 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.
Где применять эти навыки? 🚀
- Автоматизация отчетов — генерируйте еженедельные PDF-отчеты.
- Парсинг данных — извлекайте таблицы из финансовых документов.
- Объединение сканов — создавайте единые документы из разрозненных файлов.
Как говорит Данила Бежин в своих уроках: «Python — это ваш цифровой швейцарский нож для работы с документами». Посмотрите его разборы на YouTube-канале для вдохновения!
Что дальше?
Попробуйте создать PDF-резюме или автоматизировать выгрузку отчетов. Экспериментируйте с графиками (reportlab + matplotlib) или защитой PDF (PyPDF2 + пароли).
Ваш код — ваши возможности!