0

我在尝试从 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>

我已经尝试了很多东西,从字体 url 和字体系列中去掉引号,我的身体被包裹在 HTML 标签中,所以 html 的格式正确。在网页中呈现时一切都呈现正常,但在转换为 PDF 时呈现不正确。谁能帮我找出错误?

4

3 回答 3

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 之外。我不是百分百确定。

于 2013-03-28T21:23:16.163 回答
2

我曾经也有过一样的问题。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 文档中的字体已更新。

于 2019-11-13T12:39:01.037 回答
0

我迟到了这个线程,但我最近遇到了同样的问题。使用回调来提供字体定义的建议确实有效(但在我的情况下有一些限制,因为我需要一些逻辑来根据外部条件使用不同的字体)。但是,我发现问题在于 url("/static/font/swiss.ttf") 需要是绝对文件位置,而不是相对于您的应用程序位置,如图所示。例如,在我的情况下,我的应用程序位置是“/home/user/app”,url 需要是:url("/home/user/app/static/font/swiss.ttf")。

于 2018-08-08T04:12:40.703 回答