我试图在尝试从HTML渲染pdf时使用自定义字体。
我在HTML中尝试过,字体显示出来,因此字体的路径必须正确,并且可能正确使用。字体的类型为.ttf,根据http://xhtml2pdf-base.googlecode.com/hg/doc/xhtml2pdf-en.html上的文档,它应该呈现,但它不会。
以下是我的样式标签中的内容:
@font-face {
font-family: "Swiss";
src: url("/static/font/swiss.ttf");
}
body {
font-family: "Swiss";
font-size: 12px;
}
和html:
<body>
asdf
</body>
我尝试过很多东西,从字体网址和字体系列中删除引号,我的正文包含在HTML标记中,因此html格式正确。在网页中渲染时,所有内容都呈现正常,但转换为PDF时无法正确呈现。任何人都可以帮我发现错误吗?
答案 0 :(得分:2)
最好的方法是使用回调来使用文件系统路径获取字体。更准确,你也不会为每个资源(资源含义,字体,图像等)点击网络服务器
pisa.CreatePDF(html.encode("UTF-8"), file_object , encoding='UTF-8',
link_callback=fetch_resources)
def fetch_resources(uri, rel):
find_file_in_path_using_uri
return path
顺便说一句,我认为你的问题是你还没有收集静态,所以字体不是真的在/static/font/swiss.ttf。我的意思是他们不在户外django,而xhtml2pdf它在django之外。我不是百分百肯定。
答案 1 :(得分:0)
我对此线程比较晚,但是最近我遇到了同样的问题。使用回调提供字体定义的建议确实可行(但在我的情况下有一些限制,因为我需要一些逻辑来根据外部条件使用不同的字体)。但是,我发现问题在于url(“ / static / font / swiss.ttf”)需要是一个绝对文件位置,而不是相对于您的应用程序位置,如图所示。例如,在我的情况下,我的应用程序位置为“ / home / user / app”,URL必须为: url(“ / home / user / app / static / font / swiss.ttf”)。
答案 2 :(得分:0)
我遇到了同样的问题。 gdrimes是正确的。从相对网址更改后:
@font-face {
font-family: FreeSans;
src: url("./FreeSans.ttf");
}
绝对
@font-face {
font-family: FreeSans;
src: url("/home/rok/Documents/Muzey/muzey/website/templates/pdf/FreeSans.ttf");
}
我的PDF文档中的字体已更新。