2016-10-09 51 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,它將非常有幫助。我已經在操作系統(Ubuntu 14.04)中安裝了字體,但它不起作用。

我在網上搜索了很多關於這些的東西。但找不到合適的解決方案。

回答

5

由於Weasyprint支持CSS頁面媒體模塊3級,簡單頁眉和頁腳(如分頁,像你提到的)可以使用CSS來實現:

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

確保您包括您的樣式表渲染時​​:

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); 
    } 
} 

有也是使用固定位置的另一種方法,如本要點中所示:https://gist.github.com/pikhovkin/5642563