Экспорт html в PDF в приложении Django с графиками
У меня есть приложение Django, и я хочу обеспечить функциональность "экспорта в pdf" на всех страницах, (Примечание: на всех страницах есть изображения). Я видел несколько руководств по этой теме, есть два пути: либо написать свой pdf самостоятельно, либо предоставить путь к HTML файлу и контекстный словарь (который мне сложно предоставить). Мне нужно что-то вроде следующего: button -> some_url -> some_view_function -> получить все содержимое с запрашивающей страницы -> показать содержимое pdf пользователю в отдельном окне, чтобы пользователь мог его сохранить.
Для экспорта HTML-страницы с графиками в PDF в приложении Django можно использовать библиотеку типа reportlab
для генерации PDF-файла из HTML и данных графиков.
Сначала необходимо установить reportlab
, используя pip
:
pip install reportlab
Далее вы можете использовать reportlab
для создания PDF документа из HTML и данных диаграммы.
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from reportlab.platypus import Paragraph, Table, TableStyle
def export_pdf(html, chart_data):
# Create a PDF document
pdf = canvas.Canvas("my_pdf.pdf", pagesize=letter)
pdf.setFont("Helvetica", 12)
# Draw the chart on the PDF
chart = chart_data.get_chart()
chart.drawOn(pdf, *letter)
# Add the HTML content to the PDF
pdf.drawString(100, 750, html)
# Save the PDF
pdf.showPage()
pdf.save()
функция export_pdf
принимает два аргумента: html
, который представляет собой HTML-контент, добавляемый в PDF, и chart_data
, который представляет собой данные для диаграммы, рисуемой в PDF. Затем она создает объект Canvas
из reportlab
и устанавливает шрифт и размер страницы.
Далее он использует метод get_chart
объекта chart_data для получения графика и рисует его на PDF с помощью метода drawOn
. Затем он добавляет HTML-содержимое в PDF с помощью метода drawString
и сохраняет PDF с помощью методов showPage
и save.
from django.http import HttpResponse
from myapp.utils import export_pdf
def my_view(request):
# Generate the HTML and chart data
html = "<p>My HTML content</p>"
chart_data = generate_chart_data()
# Export the HTML and chart data to a PDF
pdf = export_pdf(html, chart_data)
# Return the PDF as a response
response = HttpResponse(pdf, content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="my_pdf.pdf"'
return response