2011-09-02 71 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

第二次看,沒有理由這應該是不同的。不知道爲什麼給出的例子不起作用。 –