2011-09-02 74 views
5

要开始,我已经看到了这一点其他线程,和我已经试过几乎所有试图解决这个问题,但...比萨(XHTML - > PDF)在Django将不会显示在PDF图像

当使用Pisa将HTML页面呈现为PDF时,所述HTML中的图像显着缺失。也就是说,当页面呈现为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写入mkstemp的另一个线索的建议,通过命令行将其转换为PDF,然后输出HTML,但在那里也没有成功。

我甚至尝试安装PIL 1.1.16而不是1.1.17,因为有人有类似的问题 - 没有骰子。

有没有人有一个想法,我要去哪里错了?

+3

不要使用比萨,请使用xhtml2pdf这是项目的延续。 –

+2

我也面临同样的问题.Mkstemp也没有帮助。当我们在html中设置图像尺寸时,比萨不会渲染图像。因此,尝试从仅带有图像的html生成PDF。然后继续添加其他HTML内容。 我用HTMLTODOC在最后生成PDF - > http://www.htmldoc.org/ – Abhaya

回答

2

自从我看了这个已经有一段时间了,但我认为你必须使用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) 
+0

第二次看,没有理由这应该是不同的。不知道为什么给出的例子不起作用。 –