Verwandt mit: django - pisa : Bilder zur PDF-Ausgabe hinzufügen
Ich habe eine Website, die die Google Chart API verwendet, um eine Reihe von Berichten für den Benutzer anzuzeigen, und ich versuche, eine PDF-Version zu implementieren. Ich verwende die link_callback
Parameter in pisa.pisaDocument
die für lokale Medien (css/Bilder) gut funktioniert, aber ich frage mich, ob es mit Remote-Bildern (mit einer Google-Charts-URL) funktionieren würde.
Desde el Dokumentation Auf der Pisa-Website wird zwar angedeutet, dass dies möglich ist, aber es wird nicht gezeigt, wie:
Normalerweise erwartet pisa, dass sich diese Dateien auf dem lokalen Laufwerk befinden. Sie können auch relativ zum Originaldokument referenziert werden. Aber der Programmierer möchte vielleicht Laden aus verschiedenen Quellen wie dem Internet über HTTP-Anfragen oder aus einer Datenbank oder sonstigem.
Dies ist in einem Django-Projekt, aber das ist ziemlich irrelevant. Hier ist, was ich für das Rendern verwenden:
html = render_to_string('reporting/pdf.html', keys,
context_instance=RequestContext(request))
result = StringIO.StringIO()
pdf = pisa.pisaDocument(
StringIO.StringIO(html.encode('ascii', 'xmlcharrefreplace')),
result, link_callback=link_callback)
return HttpResponse(result.getvalue(), mimetype='application/pdf')
Ich habe versucht, dass der link_callback ein urllib-Anforderungsobjekt zurückgibt, aber es scheint nicht zu funktionieren:
def link_callback(uri, rel):
if uri.find('chxt') != -1:
url = "%s?%s" % (settings.GOOGLE_CHART_URL, uri)
return urllib2.urlopen(url)
return os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
Die erzeugte PDF-Datei ist perfekt, nur die Bilder von Google Charts sind nicht vorhanden.