如何使用自动分页符从html模板打印大发票pdf?

时间:2018-07-14 16:05:31

标签: python django reportlab xhtml2pdf

产品较少 If items are less - works fine with a5 paper size
 有更多产品 When items are more - white space on right side adds up
 保持恶化 When list of products is large

使用 table {-pdf-keep-in-frame-mode: overflow;} 数据被截断 data truncates with overflow

我在Django Python中使用 XHTML2PDF 库,我已经尝试过:

  • @frame,它可以工作,但是即使使用{-pdf-keep-in-frame-mode: shrink;}也会截断内容
  • 不能使用:pdf:nextpage标签
  • p { margin: 0; -pdf-keep-with-next: true; }并将表数据放在段落中

    我想要的是:
    当产品尺寸增大时,如果它们掉落到页面上,则页面会自动断裂,其余产品应打印到下一页。
    注意:我正在使用单个html模板

    我不能将pdf:nextpage用作:

  • 产品名称(尺寸)差异很大,因此5个项目或10个项目后不能中断页面,而且我只能使用html模板,不能使用 reportlab 标签。

    HTML:

<html>
Not actual HTML code, but looks like
<style>
@page {
            size: a5 portrait;
            margin-top: 0;
            margin-bottom: 0;
        }
table {    -pdf-keep-in-frame-mode: shrink;}
<style>
<body>
<table><tbody><tr><th> ---------- Removing this line, everything works fine!

{% for data in products %}
<table><tr><td>{{data.product_name}}<table><tr><td>
    <tr><td>{{data.mrp}}<table><tr><td>
    <tr><td>{{data.selling_price}}<table><tr><td></table>
{% endfor %}
</body>
</html>

</th></tr></tbody></table> ----------- and corresponding closing tags

一些虚拟数据:

products_list = [
            {'product_name': 'Amul Cow Milk , 500ml', 'mrp': 20.0, 'selling_price': 20.0},
            {'product_name': 'Amul Cow Milk , 500ml', 'mrp': 20.0, 'selling_price': 20.0},
            {'product_name': 'Amul Cow Milk , 500ml', 'mrp': 20.0, 'selling_price': 20.0},]


Python Django API如下:

    # Render HTML to PDF
    context_dic = {"products": products_list}
    template = get_template("invoice.html")
    html = template.render(context_dic)
    response = HttpResponse(content_type='application/pdf')
    pisa_status = pisa.CreatePDF(html, dest=response)
    if pisa_status.err:
        return "render-error"
    return response

0 个答案:

没有答案