2016-10-09 50 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