Генерация 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: 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-документы уже сегодня!

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