我正在使用Django和我的代码来渲染PDF是非常典型的:
t = loader.get_template('back/templates/content/receipt.html')
c = RequestContext(request, {
'pagesize': 'A4',
'invoice': invoice,
'plan': plan,
})
html = t.render(c)
result = StringIO.StringIO()
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)
if not pdf.err:
return HttpResponse(result.getvalue(), mimetype="application/pdf")
而且receipt.html并不罕见:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Squizzal Receipt</title>
<style type="text/css">
@page {
size: {{pagesize}};
margin: 1cm;
word-spacing 1cm;
@frame footer {
-pdf-frame-content: footerContent;
bottom: 0cm;
margin-left: 9cm;
margin-right: 9cm;
height: 1cm;
}
}
</style>
</head>
<body>
<h1>Your Receipt</h1>
<<SNIP>>
但不会渲染pdf中的任何空格。所有的话都紧挨着。我尝试了普通的空间和“&amp; nbsp”,结果是一样的。例如,上面的内容将在pdf中显示为“YourReceipt”。
当我尝试使用命令行版本的pisa时,它会生成pdf,并且单词之间有空格。
有什么想法吗?
答案 0 :(得分:4)
我遇到了同样的问题,并且不想强制从浏览器下载PDF。这是一个特定于平台的问题:当未安装Microsoft TrueType字体时,Google Chrome的本机PDF查看器插件无法在某些Linux发行版的某些文档中呈现空格。有关详细信息,请参阅http://www.google.com/support/forum/p/Chrome/thread?tid=7169b114e8ea33c7&hl=en。
我通过在bash中运行以下命令来修复此问题(调整你的发行版;这是在Ubuntu上):
$ sudo apt-get install msttcorefonts
(在安装过程中接受EULA)
$ fc-cache -fv
重新启动Chrome后(重要!),本机PDF查看器正确显示带空格的PDF。
答案 1 :(得分:0)
好的,感谢akonsu,问题似乎是如何处理Django的HttpResponse(无论是在服务器端还是在浏览器端)。
而不是
return HttpResponse(result.getvalue(), mimetype="application/pdf")
使用:
resp = HttpResponse(result.getvalue(), mimetype="application/pdf")
resp['Content-Disposition'] = 'attachment; filename=receipt.pdf'
return resp
这至少产生没有空格的结果。仍然不知道为什么第一种方式不起作用。