问题描述
尝试加载静态字体。直接渲染/加载页面时,所有内容都会加载。但是当以pdf格式加载时,不会加载正确的字体!
pdf.html(也是,我正在pdf页面上加载静态文件。也是,按预期方式添加了link_callback。):
@font-face {
font-family: 'Mulish';
font-weight: 600;
src: url("{% static 'fonts/Mulish-Regular.TTF' %}")
}
@font-face {
font-family: 'Mulish';
font-weight: 700;
src: url("{% static 'fonts/Mulish-Bold.TTF' %}")
}
html {
font-family: 'Mulish' !important;
}
utils.py
def render_to_pdf(template_src,context_dict={}):
template = get_template(template_src)
html = template.render(context_dict)
result = BytesIO()
pdf = pisa.CreatePDF(BytesIO(html.encode("UTF-8")),result,encoding='UTF-8',link_callback=link_callback)
if not pdf.err:
return HttpResponse(result.getvalue(),content_type='application/pdf')
return None
def link_callback(uri,rel):
s_url = settings.STATIC_URL # Typically /static/
s_root = settings.STATIC_ROOT # Typically /home/userX/project_static/
m_url = settings.MEDIA_URL # Typically /static/media/
m_root = settings.MEDIA_ROOT # Typically /home/userX/project_static/media/
if uri.startswith(m_url):
path = os.path.join(m_root,uri.replace(m_url,""))
elif uri.startswith(s_url):
path = os.path.join(s_root,uri.replace(s_url,""))
else:
return uri # handle absolute uri (ie: http://some.tld/foo.png)
if not os.path.isfile(path):
raise Exception(
'media URI must start with %s or %s' % (s_url,m_url)
)
return path
我知道将完整的URL路径添加到src确实可以,但是这是不可接受的,因为我不想每次需要加载内容时都更改路径
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)