Джанго pdf вопрос с Пизой - PullRequest
5 голосов
/ 13 января 2011

Я хочу сгенерировать HTML-шаблон в PDF-файл, используя Pisa.Я считаю, что у меня есть все пакеты, которые мне нужны, но у меня, похоже, проблемы с этим.Вот мое мнение ниже того, что я сделал.

РЕДАКТИРОВАТЬ: Вот мой последний URL, просмотры и шаблон.

url.py

(r'^index/render_pdf/(?P<id>\d+)/$', render_pdf),

views.py

def fetch_resources(uri, rel):
    path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
    return path

def render_pdf (html, id):
    invoice_items_list = Invoice_Items.objects.filter(pk=id)
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), dest=result, link_callback=fetch_resources)
    return result

В шаблоне у меня есть этот тег.

<a href="{% url c2duo.views.render_pdf invoices.pk %}">

Ответы [ 2 ]

1 голос
/ 14 января 2011

Я не знаю, насколько это поможет, но эту функцию я использую для рендеринга PDF:

def fetch_resources(uri, rel):
 """
 Callback to allow pisa/reportlab to retrieve Images,Stylesheets, etc.
 `uri` is the href attribute from the html link element.
 `rel` gives a relative path, but it's not used here.

 """
 path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
 return path

def render_pdf (html):
 result = StringIO.StringIO()
 pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), dest=result, link_callback=fetch_resources)
 return result
0 голосов
/ 13 января 2011

Просто для удовольствия, попробуйте это вместо:

def render_to_pdf(template_src, context_dict):
    html  = "<html><head><title>Title</title></head><body><h1>Hello</h1></body></html>"
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(StringIO.StringIO(html), result)
    if not pdf.err:
        return http.HttpResponse("" % (repr(result.getvalue())))
    else:
        raise Exception("The error was %s" % pdf.err)

Если вы все еще сталкиваетесь с ошибкой, я предполагаю, что ошибка может быть в Пизе. Вы уверены, что это актуально?

...