2011-01-13 11 views
5

Ich möchte eine HTML-Vorlage zu einer PDF-Datei mit Pisa generieren. Ich glaube, ich habe alle Pakete, die ich brauche, aber ich habe Probleme damit. Hier ist meine Ansicht unten so weit was ich getan habe.Django pdf Frage mit Pisa

EDIT: Hier ist meine neueste URL, Ansichten & Vorlage.

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 

In einer Vorlage, habe ich diesen Tag.

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

nächsten, erhalten Sie die vollständige Fehlerrückverfolgung oder Verhalten, das Sie haben, und fügen Sie die Frage, damit jeder sehen kann, was passiert, wenn Sie es auf diese Weise versuchen. – nosklo

+0

Es gibt keine Rückkehr in 'render_to_pdf (template_src, context_dict)'. Könnten Sie mehr tatsächlichen Code verwenden, den Sie tatsächlich verwenden? –

+0

Code wurde aktualisiert – Shehzad009

Antwort

1

Ich weiß nicht, wie viel, das wird helfen, aber dies ist die Funktion i verwenden, um die pdf zu machen:

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

Ich erhalte einen Fehler: WSGIRequest 'Objekt hat kein Attribut' encode ' – Shehzad009

+0

Sie übergeben das Anfrageobjekt nicht an die Funktion, übergeben Sie die gerenderte Vorlage. – zsquare

+0

Bitte schauen Sie sich meinen Code soweit an, ob Änderungen nötig sind. – Shehzad009

0

Just for fun, versuchen Sie stattdessen:

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) 

Wenn Sie immer noch ein Fehler auftritt, vermute ich den Fehler in pisa sein könnte. Bist du sicher, dass es auf dem neuesten Stand ist?

+0

reiter, ich bekomme einen ungültigen Syntaxfehler in der letzten Zeile "außer Ausnahme ('PDF-Fehler')" - so nicht sicher warum. Es gab auch einen anderen Syntaxfehler in der Zeile hat einen Syntaxfehler, wo es sagt, was pdf = ... Es gibt eine extra close Klammer, die nicht da sein sollte. – Shehzad009

+0

Entschuldigung, das bekomme ich zum Ausschneiden und Einfügen aus einem fremden Code. Sollte jetzt behoben werden. –