Создание PDF из HTML с помощью Django и Reportlab

Я хочу создать PDF-файл с веб-страницы, нажав на кнопку" Загрузить PDF". Я попробовал несколько модулей, включая Reportlab и XHTML2PDF, но я не могу генерировать pdf и загружать его... Вот что я сделал с Reportlab, после визуализация HTML в PDF на сайте Django

-- views.py --

import cStringIO as StringIO
import ho.pisa as pisa
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
from cgi import escape

def index_data(request):
#Code to generate data
     return render(request, "analytics/stat.html", locals())
     return render_to_pdf(
        'analytics/stat.html',
        {
            'pagesize':'A4',
            'mylist': results,
        }
    )

def render_to_pdf(template_src, context_dict):
    template = get_template(template_src)
    context = Context(context_dict)
    html  = template.render(context)
    result = StringIO.StringIO()

    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result)
    if not pdf.err:
        return HttpResponse(result.getvalue(), content_type='application/pdf')
    return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))

-- urls.py --

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', "analytics.views.main_page", name="main_page"),
    url(r'^portail/$', "analytics.views.index_data", name="index"),
    url(r'^generate_pdf/$', "analytics.views.GroupPDFGenerate.as_view()", name="generate_pdf")

]

-- аналитика шаблонов / stat.в HTML --

{% extends "analytics/layout.html" %}

{% block title %}
    Audience
{% endblock title %}

{% block head %}
 # Script to generate google charts
{% endblock head %}

{% block body %}
<div class="page-header">
  <h1 align="center"> Audience </h1>
</div>
<div class="row">
  <div class="col-md-1">
      <h3 align="center"><a href="/logout/">Logout</a></h3>
      <h3 align="center"><a href="statistiques.pdf">Download pdf</a></h3>
  </div>
 </div>

{% endblock %}

также, есть ли лучший модуль для обработки ?

3 ответов


Я бы рекомендовал использовать wkhtmltopdf.

короткий ответ? На Ubuntu установите двоичный файл:

apt-get install wkhtmltopdf

На CentOS / RedHat:

yum install wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm

затем pip устанавливает пакет Python:

pip install pdfkit

код:

import pdfkit

input_filename = 'README.html'
output_filename = 'README.pdf'

with open(input_filename, 'r') as f:
    html_text = f.read()

pdfkit.from_string(html_text, output_filename)

для длинного ответа и деталей, я собрал блог сообщение:

http://www.peregrinesalon.com/blog/2015/06/python-3-django-generating-a-pdf-from-markdown-or-html/

это должно позаботиться о создании PDF; вам придется решить, как вы хотите обрабатывать загрузку. Удачи!


Если вы говорите, что у вас возникли проблемы даже с созданием PDF, я предлагаю вам начать с просмотра примера, который я упомянул в ответ использования Reportlab, xhtml2pdf с django-easy-pdf. Сначала получите PDF-файл для отображения в браузере, а затем перейдите к получению ссылки для его загрузки.


from easy_pdf.rendering import render_to_pdf

def pdf(request):
    with open('example.pdf', 'wb') as f2:
        f2.write(render_to_pdf('you template', {'user': request.user}, encoding=u'utf-8'))