2011-12-09 62 views
2

我知道在Python中有很多基於pdf創建的問題,但是我還沒有看到任何基於使用Pisa或xhtml2pdf創建pdf的問題。使用Pisa/xhtml2pdf在Python中創建pdfs

這是我的代碼。

pisa.pisaDocument(cStringIO.StringIO(a).encode('utf-8'),file('mypdf.pdf','wb')) 

然後

pisa.startViewer('mypdf.pdf') 

我組裝這在幾個不同的教程和例子,但我已經試過總是產生在PDF的每一件事被損壞,並試圖當我得到這個消息打開pdf。

「Adobe Reader無法打開'awesomer.pdf',因爲它不是支持的文件類型,或者是因爲文件已損壞(例如,它是作爲電子郵件附件發送的,未正確解碼)。 「

即使我沒有在字符串上使用.encode('utf-8'),也會出現此消息。

我在做什麼錯?我的Mac上的編碼是否與此有關?

回答

1

我建議做以下幾點:

pdf = pisa.pisaDocument(cStringIO.StringIO(a).encode('utf-8'),file('mypdf.pdf','wb')) 
if pdf.err: 
    print "*** %d ERRORS OCCURED" % pdf.err 

然後看到錯誤輸出是什麼。

我不知道你是什麼樣的編碼字符串,但是這也可能幫助:

pdf = pisa.pisaDocument(cStringIO.StringIO(html.encode(a)).encode('utf-8'),file('mypdf.pdf','wb')) 

這取決於是否a需要是HTML編碼

+0

古怪,如果我嘗試'使用os.system(「xhtml2pdf%的」%(文件名))'它將從命令行工作,但不是從Python本身嘗試,你怎麼想象是怎麼了?這裏用編碼? – dalanmiller

5

我建議手動關閉文件,有一個類似的問題。試試這個:

f = file('mypdf.pdf', 'wb') 
pisa.pisaDocument(cStringIO.StringIO(a).encode('utf-8'),f) 
f.close() 
+0

更好的方法,因爲close()文件很重要 – panchicore

+0

這就是爲什麼使用'with'真棒;) – minder