Tan*_*yan 5 python django fonts pagination weasyprint
我正在使用WeasyPrint在Django中生成PDF.我可以从下面的静态html文件生成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')
Run Code Online (Sandbox Code Playgroud)
但我想生成一个PDF,其中,我可以在每个页面中包含一个公共页眉/页脚并添加分页.
如果任何人都可以告诉如何包含自定义字体来生成PDF,那么它将非常有用.我在操作系统(Ubuntu 14.04)中安装了该字体,但它无法正常工作.
我在网上搜索了很多关于这些的内容.但找不到合适的解决方案.
Kei*_*ith 14
由于Weasyprint支持CSS分页媒体模块级别3,因此可以使用CSS完成简单的页眉和页脚(例如,您提到的分页):
@page {
@top-right{
content: "Page " counter(page) " of " counter(pages);
}
}
Run Code Online (Sandbox Code Playgroud)
确保在渲染时包含样式表:
HTML(string=rendered_html,
base_url=settings.SITE_URL).write_pdf(stylesheets=[CSS(settings.STATIC_ROOT + '/css/pdf_render.css')])
Run Code Online (Sandbox Code Playgroud)
但是,要渲染更复杂的页眉/页脚可能会更复杂.有些人建议在标题中包含div元素的方法只能用于打印(但我必须承认我只能使用此方法正确渲染简单元素):
@page {
@top-left {
content: element(pageHeader);
}
}
@media print {
#divHeader{
position: running(pageHeader);
}
}
Run Code Online (Sandbox Code Playgroud)
还有另一种使用固定位置的方法,如本要点所示:https://gist.github.com/pikhovkin/5642563
WeasyPrint 不支持当前正在运行的元素。尽管如此,我还是找到了一种使用命名字符串实现相同结果的方法:
@page {
@top-center {
content: string(title);
}
}
header {
width: 0;
height: 0;
visibility: hidden;
string-set: title content();
}
Run Code Online (Sandbox Code Playgroud)
现在您可以将您的内容添加到一个不可见的 HTML 标题元素中。
<header>Content of the header goes here</header>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6353 次 |
| 最近记录: |