Генерация PDF в Python

Мой любимый инструмент — pdf-reports

Содержимое страницы

Генерация PDF-отчетов с использованием Python

Python, с его обширными библиотеками и модулями, предлагает мощные инструменты для создания профессиональных PDF-отчетов.

Это руководство исследует различные методы создания PDF-документов с использованием Python, рассматривая популярные библиотеки, такие как ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports и PdfKit.

python на отчете

Почему создавать 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:

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>Sample PDF</title></head>
<body>
<h1>Hello, 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. Это руководство проведет вас через различные примеры и сценарии использования генерации PDF с помощью pdfkit.

Ключевые особенности

  • 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>Sample 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 сегодня!

Полезные ссылки