我试图用这个片段来从模板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再返回到用户的Unicode(HTML,“UTF-8”),但它抛出类型错误。
此外,我想,也许这是因为默认字体不知何故不支持UTF-8,以便根据比萨文档我试图设置在模板体fontface在样式部分。
这仍然没有给出结果。
没有任何一个有一些想法如何解决这个问题?
这确实为我工作:
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result, encoding='UTF-8')
尝试更换
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)
同
pdf = pisa.pisaDocument(StringIO.StringIO(html), result, encoding='UTF-8')
或检出这个答案HTML到PDF的Django的网站?
您需要修改你的Django模板。 在将链接到的字体文件在文档中使用的字符样式表中添加新字体。 和字体文件必须是从服务器访问(在Ubuntu下,你可以找到文件使用字体在/ usr /共享/字体/ TrueType字体/目录)。 例如:
@font-face {
font-family: DejaMono;
src: url(font/DejaVuSansMono.ttf);
}
然后,如果你有未来的HTML代码:
<div>Some non-latin characters</div>
您可以显示在这个CSS规则DejaMono字体,文本:
div { font-family: DejaMono; }
这对我的作品时,我产生与西里尔字符的PDF文档。
我用西里尔字符所面临的同样的问题。
该解决方案包含两个步骤:在您的HTML文件1.指出字体文件
<style type="text/css">
@font-face {
font-family: Arial; src: url("files/arial.ttf");
}
body {
font-family: Arial;
}
</style>
2.给“比萨”根路径(以便找到相对路径字体文件)在我的情况是这样的
pdf = pisa.pisaDocument(html, result, path=PATH_TO_DJANGO_PROJECT)
因为字体被放置在PATH_TO_DJANGO_PROJECT /文件/ ARIAL.TTF
如果要调用createPDF代替pisaDocument方法,你可以使用
pisa.CreatePDF(html.encode('UTF-8'), response, link_callback=fetch_resources, encoding='UTF-8')
文章来源: Is there a way to generate pdf containing non-ascii symbols with pisa from django template?