関連:django --pisa:PDF出力に画像を追加する
Google Chart APIを使用してユーザーに一連のレポートを表示するサイトがあり、PDFバージョンを実装しようとしています。link_callback
ローカルメディア(css / images)に最適なパラメーターを使用していますpisa.pisaDocument
が、リモート画像(google charts URLを使用)で機能するかどうか疑問に思っています。
ピサのウェブサイトのドキュメントから、これが可能であることが示唆されていますが、その方法は示されていません。
通常、pisaは、これらのファイルがローカルドライブにあることを想定しています。また、元のドキュメントを基準にして参照することもできます。しかし、プログラマーは、HTTP要求を介して、またはデータベースなどから、インターネットなどのさまざまな種類のソースからロードしたい場合があります。
これはDjangoプロジェクトに含まれていますが、それはまったく関係ありません。これが私がレンダリングに使用しているものです:
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')
link_callbackにurllibリクエストオブジェクトを返させようとしましたが、機能しないようです。
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, ""))
それが生成するPDFは、グーグルチャートの画像がそこにないことを除いて完全に出てきます。