Генерация PDF на Python
Мой любимый lib — pdf-reports
Генерация PDF-отчетов с использованием Python
Python, благодаря своим обширным библиотекам и модулям, предлагает мощные инструменты для создания профессиональных PDF-отчетов. Это руководство рассматривает различные методы создания PDF-документов с использованием Python, охватывая популярные библиотеки, такие как ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports и PdfKit. Это часть нашего Инструменты документации в 2026: Markdown, LaTeX, PDF и рабочие процессы печати хаба.

Почему генерировать PDF-отчеты с использованием Python?
- Автоматизация: Скрипты на Python могут автоматизировать создание отчетов, экономя время и уменьшая человеческую ошибку.
- Настройка: Настройте отчеты под конкретные потребности, добавляя текст, изображения, таблицы и графики.
- Согласованность: Обеспечьте согласованность брендинга в отчетах с использованием стандартизированных шаблонов.
- Многофункциональность: Генерируйте счета, бизнес-отчеты, данные суммаризаций или любой другой тип документа.
Популярные библиотеки Python для генерации PDF
ReportLab
ReportLab — это универсальная библиотека, которая позволяет создавать PDF-документы программно. Она поддерживает добавление текста, изображений, таблиц и графики, что делает ее подходящей для различных типов отчетов.
Плюсы:
- Богатый набор функций
- Высокоуровневый API для простого использования
- Поддерживает продвинутые функции, такие как аннотации и интерактивные формы
Минусы:
- Сложнее изучить по сравнению с другими библиотеками
- Менее интуитивный API для некоторых задач
Использование ReportLab
Установка: Установите ReportLab с помощью pip:
pip install reportlab
Базовая настройка:
from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
# Добавление текста:
python c.drawString(100, 800, "Hello World")
# Сохранение PDF:
python c.save()
FPDF
FPDF — это простая, но мощная библиотека для создания PDF, написанная на чистом Python. Она идеально подходит для генерации базовых PDF-документов с минимальным количеством кода.
Плюсы:
- Легко изучить и использовать
- Легковесная и быстрая
- Поддерживает символы Unicode
Минусы:
- Ограниченный набор функций по сравнению с ReportLab
- Меньший контроль над расположением элементов на странице
Использование FPDF
Установка: Установите FPDF с помощью pip:
pip install fpdf2
Базовая настройка:
from fpdf import FPDF pdf = FPDF()
# Добавление текста:
python pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World')
# Сохранение PDF:
python pdf.output('hello.pdf', 'F')
Xhtml2pdf
Xhtml2pdf — это конвертер CSS/HTML в PDF, который использует ReportLab в фоне. Это идеальный выбор для генерации PDF из HTML-шаблонов, делая его отличным решением для конвертации веб-страниц в PDF.
Плюсы:
- Конвертирует HTML и CSS в PDF
- Поддерживает сложные макеты и стили
- Хорошо интегрируется с веб-фреймворками, такими как Django
Минусы:
- Требуется знание HTML и CSS
- Может быть не подходит для простых, не веб-ориентированных отчетов
Использование Xhtml2pdf
Установка: Установите Xhtml2pdf с помощью pip:
pip install xhtml2pdf
Генерация PDF из HTML: python
from xhtml2pdf import pisa
html = "<h1>Hello World</h1>"
with open('hello.pdf', 'wb') as output_file:
pisa_status = pisa.CreatePDF(html, dest=output_file)
WeasyPrint
WeasyPrint — это универсальная библиотека Python, которая позволяет разработчикам конвертировать HTML и CSS в PDF-документы с высококачественным рендерингом. Она особенно полезна для генерации отчетов, счетов или любых других документов, требующих точного форматирования. Ниже приведены несколько примеров, демонстрирующих, как использовать WeasyPrint в различных сценариях.
Функции
- Конвертирует HTML и CSS в PDF-документы.
- Обрабатывает динамическое отображение данных с помощью шаблонных движков, таких как Jinja2.
Установка:
pip install weasyprint
Вот простой пример генерации PDF из строки HTML:
from weasyprint import HTML
html_string = """
<html>
<head><title>Пример PDF</title></head>
<body>
<h1>Привет, WeasyPrint!</h1>
<p>Это пример PDF, сгенерированный с использованием WeasyPrint.</p>
</body>
</html>
"""
HTML(string=html_string).write_pdf("sample.pdf")
В этом примере используется класс HTML из WeasyPrint для преобразования строки HTML в PDF-файл, называемый “sample.pdf”.
Загрузка HTML из файлов
Вы также можете загружать содержимое HTML напрямую из файлов:
from weasyprint import HTML
# Загрузка HTML из файла
HTML('sample.html').write_pdf('output.pdf')
Этот метод полезен, когда ваше содержимое HTML хранится во внешнем файле. Использование CSS-стилей
WeasyPrint поддерживает использование CSS-стилей для стилизации ваших PDF-документов. Вот как можно применить файл CSS:
from weasyprint import HTML
# Загрузка HTML и CSS из файлов
HTML('sample.html').write_pdf('output.pdf', stylesheets=['sample.css'])
Это позволяет создавать более сложные стили, делая процесс создания визуально привлекательных PDF-документов проще .
Jinja2
Jinja2 — это мощный движок шаблонов для Python, который позволяет генерировать динамическое содержимое, встраивая выражения Python, условные операторы и циклы в шаблоны. Это руководство пройдется через различные примеры использования Jinja2 в Python, от базовой подстановки переменных до более продвинутых функций, таких как наследование шаблонов.
Ключевые функции Jinja2
- Движок шаблонов, который можно использовать в сочетании с WeasyPrint или ReportLab для динамической генерации HTML-содержимого.
- Идеально подходит для вставки данных в предопределенные шаблоны.
- Установка:
pip install jinja2
см. примеры на официальной странице документации Jinja2: https://jinja.palletsprojects.com/en/3.0.x/
pdfkit
pdfkit — это мощная библиотека Python, которая упрощает процесс преобразования HTML-содержимого в PDF-документы. Она служит оберткой для утилиты wkhtmltopdf, используя WebKit для точного рендеринга HTML-страниц в формате PDF. Это руководство пройдется через различные примеры и сценарии использования pdfkit для генерации PDF.
Ключевые функции
- Python-обертка для wkhtmltopdf, которая преобразует HTML в PDF.
- Требуется системная установка wkhtmltopdf. https://wkhtmltopdf.org/downloads.html
Установка:
# и убедитесь, что wkhtmltopdf установлен.
Базовое использование — преобразование строки HTML в PDF
Вы можете преобразовать простую строку HTML в PDF-файл с помощью pdfkit.from_string():
import pdfkit
html_sample = """
<html>
<head><title>Пример PDF</title></head>
<body>
<h1>Это заголовок</h1>
<p>Первая строка.</p>
<p>Вторая строка.</p>
<p>Третья строка.</p>
<p>Четвертая строка.</p>
</body>
</html>
"""
pdfkit.from_string(html_sample, 'output.pdf')
Это создаст PDF-файл, называемый output.pdf, в текущем каталоге.
Преобразование локального HTML-файла в PDF
Если у вас есть локальный HTML-файл, используйте pdfkit.from_file():
import pdfkit
pdfkit.from_file('local.html', 'sample.pdf')
Библиотека PDF Reports (pdf-reports)
Создание PDF-отчетов с использованием библиотеки pdf-reports в Python может быть мощным способом генерации профессионально выглядящих документов из шаблонов HTML или Pug. Эта библиотека использует современные компоненты через фреймворк Semantic UI и предоставляет методы для вставки таблиц, графиков и других элементов в ваши PDF-файлы.
Библиотека pdf-reports предназначена для создания визуально привлекательных PDF-отчетов из шаблонов HTML или Pug. Она официально поддерживает Python 3.x, но может также работать на Python 2.x с соответствующей версией weasyprint. Это делает ее универсальным инструментом для программного создания динамических и структурированных документов.
Ключевые функции
- Современные компоненты: Использует фреймворк Semantic UI для современных компонентов.
- Вставка элементов: Позволяет вставлять таблицы, графики и другие элементы в PDF-файлы.
- Поддержка шаблонов: Поддерживает шаблоны HTML и Pug для гибкого дизайна отчетов.
Пример использования pdf-reports
Установка:
pip install pdf-reports
Вот базовый пример использования библиотеки pdf-reports:
from pdf_reports import PDFReport
# Определите ваш файл шаблона (template.pug)
template = """
doctype html
html
head
title= title
body
h1= title
p Это пример отчета.
"""
# Создайте экземпляр PDF-отчета
report = PDFReport(template)
# Установите контекст для шаблона
context = {
'title': 'Пример отчета'
}
# Сгенерируйте PDF
pdf = report.generate(context, output='sample_report.pdf')
Продолжение на тему генерации PDF в Python
Python предлагает широкий спектр мощных библиотек для генерации PDF-отчетов. Независимо от того, создаете ли вы счета, бизнес-отчеты или суммаризацию данных, эти инструменты позволяют автоматизировать процесс, настраивать документы и обеспечивать согласованность брендинга. Выберите библиотеку, которая лучше всего подходит для ваших нужд, и начните создавать профессиональные PDF-документы уже сегодня!