使用Pisa/xhtml2pdf在Python中创建PDF

2 投票
2 回答
6799 浏览
提问于 2025-04-17 08:01

我知道关于在Python中创建PDF的问题很多,但我还没看到有人讨论用Pisa或xhtml2pdf来创建PDF的。

这是我的代码。

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

然后

pisa.startViewer('mypdf.pdf')

我是根据几个不同的教程和示例拼凑出来的,但我尝试的每一个方法,最后生成的PDF文件总是损坏,打开时总是出现这个提示。

“Adobe Reader无法打开'awesomer.pdf',因为它不是支持的文件类型,或者文件已经损坏(例如,它作为电子邮件附件发送时没有正确解码)。”

即使我没有在字符串上使用.encode('utf-8'),这个提示也会出现。

我到底哪里出错了?我在Mac上的编码设置会影响这个吗?

2 个回答

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编码。

5

我建议你手动关闭文件,我之前也遇到过类似的问题。试试这个:

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

撰写回答