【发布时间】:2011-09-11 17:15:55
【问题描述】:
我正在使用 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 中的任何空格。所有的词都紧挨着。我试过普通空格和“ ”,结果是一样的。例如,以上内容在 pdf 中将显示为“YourReceipt”。
当我尝试使用 pisa 的命令行版本时,它生成的 pdf 文件很好,单词之间有空格。
有什么想法吗?
【问题讨论】:
-
将 t.render(c).encode("UTF-8") 的 HTML 输出保存到一个文件中,并将该文件提供给命令行版本。它产生什么?
-
html 文件符合预期,将该文件传递到 cmd 行 pisa 会产生预期结果。目前我正在使用 django 开发服务器对此进行测试,但我也在 apache 上使用 wsgi 对其进行了测试。我想不出还有什么可能会影响到这一点。
-
尝试将 pisa.pisaDocument() 的结果保存到文件中并在 PDF 查看器中打开该文件。没事吧?
-
所以我不明白这一点。如果我这样做: pdf = pisa.CreatePDF(html.encode("UTF-8"), file("test.pdf", "wb")) 它会创建一个好的文件(带空格)。但是当我将 StringIO 结果对象传递给它并执行以下操作时: return HttpResponse(result.getvalue(), mimetype="application/pdf") 空格被剥离。 StringIO 是否对流进行处理?
-
pisaDocument 和 CreatePDF 产生相同的结果。我认为它必须与StringIO有关。我也试过 StringIO 和 cStringIO...同样的结果。