gpt4 book ai didi

python - 在 pisa html 到 pdf 库中使用图像 URL 进行 link_callback

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:44 24 4
gpt4 key购买 nike

相关:django - pisa : adding images to PDF output

我有一个网站使用 Google Chart API 向用户显示一堆报告,我正在尝试实现 PDF 版本。我在 pisa.pisaDocument 中使用了 link_callback 参数,它非常适合本地媒体(css/图像),但我想知道它是否适用于远程图像(使用谷歌图表 URL)。

来自documentation在 pisa 网站上,他们暗示这是可能的,但他们没有说明如何:

Normaly pisa expects these files to be found on the local drive. They may also be referenced relative to the original document. But the programmer might want to load form different kind of sources like the Internet via HTTP requests or from a database or anything else.

这是在 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 非常完美,只是没有 google 图表图像。

最佳答案

好吧,这比我预期的要容易得多。在您的 link_callback 方法中,如果 uri 是远程图像,只需返回该值即可。

def link_callback(uri, rel):
if uri.find('chart.apis.google.com') != -1:
return uri
return os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))

浏览器对图像 URL 的挑剔程度要低得多,因此请确保为 pisa 正确引用 uri。我的里面有空格字符,这就是它一开始失败的原因(替换 w/'+' 修复它)。

关于python - 在 pisa html 到 pdf 库中使用图像 URL 进行 link_callback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4000951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com