相关:django - pisa:将图像添加到 PDF 输出
我有一个使用 Google Chart API 向用户显示一堆报告的网站,我正在尝试实现 PDF 版本。我正在使用适用于本地媒体(css/images)的link_callback
参数pisa.pisaDocument
,但我想知道它是否适用于远程图像(使用谷歌图表 URL)。
从比萨网站上的文档中,他们暗示这是可能的,但他们没有展示如何:
通常,pisa 期望这些文件可以在本地驱动器上找到。它们也可以相对于原始文档进行引用。但是程序员可能希望通过 HTTP 请求或从数据库或其他任何东西从不同类型的源(如 Internet)加载。
这是在 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 非常完美,只是没有谷歌图表图像。