1

我正在使用 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,单词之间有空格。

有什么想法吗?

4

2 回答 2

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。

于 2012-02-02T05:33:05.023 回答
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

这至少会产生一个没有空格的结果。仍然不知道为什么第一种方法不起作用。

于 2011-09-11T23:47:27.533 回答