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 は適切にフォーマットされています。Web ページでレンダリングするときはすべて正常にレンダリングされますが、PDF に変換すると正しくレンダリングされません。誰でもエラーを見つけるのを手伝ってもらえますか?

4

3 に答える 3

2

最善の方法は、コールバックを使用して、ファイルシステム パスを使用してフォントをフェッチすることです。より正確であり、各リソース (リソースの意味、フォント、画像など) に対して Web サーバーにアクセスする必要もありません。

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の外にあります。100%確信はありません。

于 2013-03-28T21:23:16.163 に答える
0

私はこのスレッドに遅れていますが、最近同じ問題がありました。コールバックを使用してフォント定義を提供するという提案は機能します (ただし、私の場合、外部条件に応じて異なるフォントを使用するロジックが必要だったため、いくつかの制限がありました)。ただし、問題は、示されているように、url("/static/font/swiss.ttf") がアプリケーションの場所に対して相対的ではなく、絶対的なファイルの場所である必要があることであることがわかりました。たとえば、私の場合、アプリケーションの場所は '/home/user/app' で、URL は url("/home/user/app/static/font/swiss.ttf") である必要があります。

于 2018-08-08T04:12:40.703 に答える