Для генерации PDF из кастомного HTML в Django шаблонах, наиболее устойчивым и надежным решением является использование библиотеки wkhtmltopdf.
Wkhtmltopdf является инструментом командной строки, который использует WebKit (движок браузера) для отображения HTML-кода и его последующего преобразования в PDF. Wkhtmltopdf имеет широкий функционал и позволяет генерировать PDF с поддержкой различных стилей, настраиваемых параметров и даже интерактивных элементов.
Для использования wkhtmltopdf в вашем Django проекте вам потребуется выполнить несколько шагов:
1. Установка wkhtmltopdf:
Для начала, вам необходимо установить wkhtmltopdf на ваш сервер. Вы можете найти инструкции по установке на официальном сайте проекта (https://wkhtmltopdf.org/). Обратитесь к инструкции, соответствующей вашей операционной системе.
2. Установка библиотеки pdfkit:
Для удобства использования wkhtmltopdf в Django, мы можем использовать вспомогательную библиотеку pdfkit. Установите ее с помощью pip
:
pip install pdfkit
3. Настройка основных параметров в Django:
В вашем файле настроек Django (settings.py) добавьте следующие строки:
import pdfkit WKHTMLTOPDF_CMD = '/путь/к/установленному/wkhtmltopdf' # Укажите путь к установленному wkhtmltopdf PDFKIT_OPTIONS = { 'page-size': 'A4', 'encoding': 'UTF-8', } pdfkit_config = pdfkit.configuration(wkhtmltopdf=WKHTMLTOPDF_CMD)
Параметры WKHTMLTOPDF_CMD
и PDFKIT_OPTIONS
могут быть настроены по вашему усмотрению, в соответствии с требуемыми настройками для генерации PDF.
4. Использование pdfkit в представлении Django:
Добавьте импорт pdfkit
в ваше представление Django:
import pdfkit from django.http import HttpResponse def generate_pdf(request): # Получите HTML-код из вашего шаблона Django html = render_to_string('your_template.html', {'context_variable': 'value'}) # Генерируем PDF из HTML с помощью pdfkit pdf = pdfkit.from_string(html, False, options=PDFKIT_OPTIONS, configuration=pdfkit_config) # Создаем и возвращаем HTTP-ответ с PDF-данными response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename="generated_pdf.pdf"' response.write(pdf) return response
В данном примере generate_pdf
- это вспомогательное представление Django, которое генерирует PDF из вашего HTML-шаблона. Вы также можете передать переменные контекста в шаблон, как показано выше.
Когда вы вызываете это представление, он сгенерирует PDF-файл и вернет его в виде HTTP-ответа для загрузки в браузере.
Это основной подход для генерации PDF из кастомного HTML в Django, используя wkhtmltopdf. Убедитесь, что вы правильно настроили путь к wkhtmltopdf в настройках Django и что у вас установлены все необходимые зависимости и библиотеки.