我正在尝试使用以下代码片段从模板生成pdf:
def write_pdf(template_src, context_dict):
template = get_template(template_src)
context = Context(context_dict)
html = template.render(context)
result = StringIO.StringIO()
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)
if not pdf.err:
return http.HttpResponse(result.getvalue(), mimetype='application/pdf')
except Exception('PDF error')
所有非拉丁符号都不能正确显示,模板和视图使用utf-8编码保存。
我尝试将视图保存为ANSI,然后保存为user unicode(html,"UTF-8"),但它抛出了TypeError。
另外,我认为这可能是因为默认字体不支持utf-8,所以根据比萨的文档,我尝试在样式部分的模板体中设置fontface。
这仍然没有给出结果。
有没有人知道如何解决这个问题?
发布于 2009-11-24 18:57:56
这对我来说是可行的:
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result, encoding='UTF-8')
发布于 2009-10-28 21:37:25
尝试替换
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)
使用
pdf = pisa.pisaDocument(StringIO.StringIO(html), result, encoding='UTF-8')
发布于 2010-01-27 21:11:07
您需要修改您的django模板。在样式表中添加新字体,该字体将链接到包含文档中使用的字符的字体文件。而且该字体文件必须可以从您的服务器访问(在Ubuntu下,您可以在/usr/share/ fonts /truetype/目录中找到带有字体的文件)。例如:
@font-face {
font-family: DejaMono;
src: url(font/DejaVuSansMono.ttf);
}
然后,如果您有下一个HTML代码:
<div>Some non-latin characters</div>
您可以使用以下DejaMono规则以CSS字体显示该文本:
div { font-family: DejaMono; }
当我生成带有西里尔字符的PDF文档时,这对我很有效。
https://stackoverflow.com/questions/1637229
复制相似问题