Экспорт 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
Вернуться на верх