Django中Pisa(XHTML->PDF)不显示PDF中的图片

5 投票
2 回答
3827 浏览
提问于 2025-04-17 01:18

首先,我看到过其他关于这个问题的讨论,我几乎尝试了所有的方法来解决这个问题,但是……

当我用Pisa把一个HTML页面转换成PDF时,页面中的图片明显消失了。也就是说,当页面以HTML格式显示时,一切都很好,但一旦我用Pisa转换成PDF,图片就不见了。

我发现最常见的解决办法是创建一个链接回调函数,如下所示:

def fetch_resources(uri, rel):
    path = os.path.join(settings.MEDIA_ROOT, uri.replace(settings.MEDIA_URL, ""))
    return path

def my_view(request, variable1):
    html = render_to_string('template_goes_here.html', dict, context_instance=RequestContext(request))
    result = StringIO()
    pdf = pisa.pisaDocument(StringIO(html.encode("UTF-8")), dest=result, link_callback=fetch_resources)
    if not pdf.err:
        return HttpResponse(result.getvalue(), mimetype='application/pdf')
    return HttpResponse('Pisa hates you! %s' % cgi.escape(html))

但是,这个方法并没有奏效。PDF生成了,没问题,但图片还是没有。

我还在另一个讨论中看到一个建议,说是把HTML写入一个临时文件,然后通过命令行转换成PDF,最后输出HTML,但这也没有成功。

我甚至尝试安装PIL 1.1.16版本,而不是1.1.17版本,因为有个人遇到过类似的问题——结果也不行。

有没有人知道我哪里出错了?

2 个回答

0

我觉得这可能会有帮助。在我的情况下,Windows使用斜杠是问题的根源。https://stackoverflow.com/a/12644633/1236599

3

我有一段时间没看这个了,但我记得你需要用到lambda或者functools。

比如说:

links = lambda uri, rel: os.path.join(settings.MEDIA_ROOT, 
    uri.replace(settings.MEDIA_URL, ''))


pdf = pisa.pisaDocument(StringIO(html.encode("UTF-8")),
    dest=result, link_callback=links)

撰写回答