html2pdf с Джанго

Я пытаюсь создать файл PDF из рендеринга html. Я использую следующий класс для создания HTML

Views.py

class ReportList(ListView):
model = Reports
template_name = 'myreports.html' 
context_object_name = 'reports'  
def get_context_data(self, *args,**kwargs):
    context = super(ReportListView, self).get_context_data(*args,**kwargs)
    context['reports'] = Reports.objects.all().values('id','idsys','time','item','customer').filter(id =self.kwargs['id'],.... )
    return context

urls.py

    url(r'^reports/(?P<id>\d+).../$', views.ReportList.as_view(), name = 'myreports'),

Я не знаю, как сгенерировать PDF-файл (по ссылке на кнопку). Я безуспешно тестировал reportlab и wkhtmltopdf !!

У вас есть предложения, пожалуйста?

Я также нашел django-easy-pdf, я думаю, что следующий класс может решить мой вопрос:

views.py

class HelloPDFView(PDFTemplateView):
model = Reports
template_name = 'reports.html' 
def get_context_data(self, **kwargs):
    return super(HelloPDFView, self).get_context_data(
        pagesize='A4',
        title='Pdf - Title!',
        **kwargs
    )

но, к сожалению, я не могу использовать его с моим классом Reportlist выше, мне нужно сначала создать report.html, а затем myreport.pdf

urls.py

url(r'^myreports.pdf$', views.HelloPDFView.as_view())

Кроме того, report.html содержит статические файлы и транс-функции.


person Mixo    schedule 08.06.2018    source источник
comment
Вы можете перейти по этой ссылке,   -  person Lemayzeur    schedule 08.06.2018
comment
@Lemayzeur спасибо!! Я новичок в Django, я нашел django-esy-pdf, и я думаю, что это проще, чем другие (я отредактировал сообщение для этой цели), но я не знаю, как объединить его с моим классом Reportlist.   -  person Mixo    schedule 09.06.2018


Ответы (1)


Полное раскрытие — я запускаю Api2Pdf.com — это оболочка для популярных механизмов рендеринга PDF, таких как wkhtmltopdf и безголовый хром. Обе эти библиотеки являются отличными, но заставить их работать в вашей среде может быть проблемой.

Я написал библиотеку Python, которую вы можете использовать здесь.

В вашем случае вы бы сделали что-то вроде:

from api2pdf import Api2Pdf

html_template = '<p>Replace this with your report html</p>'
a2p = Api2Pdf('Your-Api-Key')
pdf_options = {
    'pageSize': 'A4',
    'title': 'Pdf - Title!'
}
api_response = a2p.WkHtmlToPdf.convert_from_html(html_template, inline_pdf=True, **pdf_options)
url_to_report = api_response.result['pdf'] 
# redirect the user to url_to_report - which is a link to the PDF

Надеюсь это поможет

person apexdodge    schedule 20.06.2018