Как создать PDF в Django с WeasyPrint

  1. Что такое WeasyPrint?
  2. Монтаж

Иногда нам нужно создать PDF-файлы, которые содержат информацию. Эта задача в Django проста благодаря библиотеке WeasyPrint . Итак, давайте поговорим об этой библиотеке и о том, как она используется.

Что такое WeasyPrint?

WeasyPrint - это механизм визуализации для HTML и CSS, который можно экспортировать в PDF . Он направлен на поддержку веб-стандартов для печати. WeasyPrint - это бесплатное программное обеспечение, доступное по лицензии BSD .

Монтаж

pip установить WeasyPrint

Чтобы показать использование этой библиотеки , мы создаем модель, которая содержит людей с 3 данными (имя, фамилия и адрес электронной почты). Идея состоит в том, чтобы создать PDF-файл , содержащий таблицу с данными всех людей. Мы начали!

# - * - coding: utf-8 - * - из .models import Person из django.http import HttpResponse из django.template.loader import render_to_string из weasyprint import HTML import tempfile def generate_pdf (request): "" "Создать PDF-файл." "" # Данные модели people = Person.objects.all (). Order_by ('last_name') # Rendered html_string = render_to_string ('bedjango / pdf.html', {'people': people}) html = HTML (string = html_string ) result = html.write_pdf () # Создание ответа HTTP-ответа = HttpResponse (content_type = 'application / pdf;') response ['Content-Disposition'] = 'inline; имя_файла = list_people.pdf 'response [' Content-Transfer-Encoding '] =' двоичный 'с tempfile.NamedTeilitaryFile (delete = True) в качестве вывода: output.write (результат) output.flush () output = open (output.name) , 'r') response.write (output.read ()) возвращает ответ от django.conf.urls, с которого импортируется URL. импортировать представления urlpatterns = [url (r '^ generate / pdf / $', views.generate_pdf, name = 'generate_pdf'),] <html> <head> <title> Test </ title> <style> h1 {text- выровнять: центр; } table {border: 1px solid; поле: 0 авто; ширина: 70%; } td, th {text-align: center; граница: 1px solid; } </ style> </ head> <body> <h1> Список людей </ h1> <таблица> <thead> <tr> <th> Фамилия </ th> <th> Имя </ th> < th> Электронная почта </ th> </ tr> </ thead> <tbody> {% для человека в людях%} <tr> <td> {{person.last_name}} </ td> <td> {{person. first_name}} </ td> <td> {{person.email}} </ td> </ tr> {% endfor%} </ tbody> </ table> </ body> </ html>

  1. Мы создаем очень простое представление для рендеринга и создаем http-ответ в нашем views.py. Очевидно, этот код можно разделить на слои для улучшения логики, но в моем случае я не выбрал этот вариант, поскольку это простой тест.
  2. Мы добавляем новый URL в urls.py, чтобы связать наше новое представление, которое будет генерировать PDF .

  3. Наконец, мы создаем HTML-шаблон для придания разметки и стиля PDF . Эта опция является одной из точек в пользу этой библиотеки, поскольку мы разрешаем использовать в качестве шаблонов html и css . Другие библиотеки pdf , не допускают эту опцию, а компоновка информации основана на расчете спредов и выравниваний , что очень неудобно.

  4. Как обычно, мы можем использовать теги django ( {% for%} , {% if%} и т. Д.). Мы проверяем результат .

Как вы можете видеть в 4 простых шагах , мы можем создать PDF очень быстро . Надеюсь, вам понравился этот пост. Я оставляю официальную библиотечную документацию ниже. Не стесняйтесь спрашивать!

http://weasyprint.readthedocs.io/en/latest/index.html

С уважением!

Что такое WeasyPrint?
Что такое WeasyPrint?