2016-10-09 27 views
2

私はWeasyPrintを使ってDjangoでPDFを生成しています。私は以下のような静的なHTMLファイルからPDFを生成することができます -一般的なヘッダー/フッターと改ページを持つWeasyPrintでPDFを生成

from django.template import Context, Template 
import weasyprint 

with open('static_file.html', 'r') as myfile: 
    html_str = myfile.read() 

template = Template(html_message) 
    context = Context({'some_key': 'some_value'}) 
    rendered_str = template.render(context) 

weasyprint.HTML(string=rendered_str).write_pdf('generated.pdf') 

しかし、私は、私は各ページで共通のヘッダ/フッタを含めると、改ページを追加することが可能なPDFを生成します。

また、誰でもカスタムフォントを組み込んでPDFを生成する方法を伝えることができれば非常に役に立ちます。 OS(Ubuntu 14.04)にフォントをインストールしましたが、うまくいきません。

私はこれらについてウェブで多くを検索しました。しかし、適切な解決策を見つけることができませんでした。レンダリング時に、あなたのスタイルシートが含まれていることを確認してください

@page { 
    @top-right{ 
     content: "Page " counter(page) " of " counter(pages); 
    } 
} 

:Weasyprint以来

答えて

5

は、CSSを使用して達成することができるCSSページ媒体モジュールレベル3、シンプルヘッダーとフッター(例えばページネーション、あなたが言及したように)サポートしています。

HTML(string=rendered_html, 
    base_url=settings.SITE_URL).write_pdf(stylesheets=[CSS(settings.STATIC_ROOT + '/css/pdf_render.css')]) 

しかし、レンダリングするために、より複雑な、ヘッダー/フッターが詳細..複雑になることがあり得ること。一部の人々は唯一のプリントのためにレンダリングするヘッダー内のdiv要素を含む方法を提案している(しかし、私は、私はこの方法だけで適切にレンダリングするために単純な要素を取得することができた認めなければならない):あり

@page { 
    @top-left { 
     content: element(pageHeader); 
    } 
} 
@media print { 
    #divHeader{ 
     position: running(pageHeader); 
    } 
} 

この要点で示されている固定位置を使用するもう1つの方法:https://gist.github.com/pikhovkin/5642563

関連する問題