Django-easy-pdf,在文档的每一页上都有标题

时间:2017-01-31 15:31:13

标签: django pdf django-templates

我正在尝试导出PDF文件中的某些数据。我正在使用:

  • Django 1.9.12
  • django-easy-pdf 0.1.0
  • Python 2.7

导出工作正常,所有(我的观点没问题),但我正在努力为文档的每个页面添加页眉。

此时我只能在第一页上呈现它。页脚没有这样的问题,它在每个页面都正确呈现。

我的模板如下:

{% extends "easy_pdf/base.html" %}

{% block extra_style %}
<style type="text/css">

    @page {
        size: landscape;
        margin-left: 1cm;
        margin-right: 1cm;
        margin-top: 1.5cm;
        margin-bottom: 2cm;

        @frame footer {
            -pdf-frame-content: page-footer;
            bottom: 0cm;
            margin-left: 1cm;
            margin-right: 1cm;
            height: 2cm;
        }
    }

</style>
{% endblock %}

{% block page_header %}
    {% include "document_head.html" %}
{% endblock %}

{% block content %}
    {% include "main_table.html" %}
{% endblock %}

{% block page_foot %}
    {% include "document_foot.html" %}
{% endblock %}

执行块不包含没有区别。

我根据自己的需要(页面和页脚)重写了 base.html 的基本样式。

我不确定我是否正确理解了标题的功能,但在我看来它应该在每个页面上呈现(类似于MS Word标题),因为标题不等于标题。如果我的理解是错误的,因为必须有另一种方法来在每个页面上呈现标题。

我的PDF内容是动态的,无法预测其长度。

我已阅读documentation,但我未能找到问题的解决方案,而且我也找不到任何解决方案。

另请注意,我以横向方向呈现PDF。

感谢您的帮助和建议。

2 个答案:

答案 0 :(得分:1)

找到一个解决方案,如果其他人发现它有用,我会在这里发布。

事实证明,我必须完全重写base.html并从中扩展。我的 new_base.html 如下:

<!DOCTYPE html>
<html>
<head>

    {% block style_base %}
        {% block layout_style %}
            <style type="text/css">

            </style>
        {%endblock%}
        {% block extra_style %}{% endblock %}
    {% endblock %}

</head>
<body>

    <div id="page-header">
        {%block page_header%}
        {%endblock%}
    </div>

    <div>
        {%block content%}
        {%endblock%}
    </div>

    <div id="page-footer">
        {%block page_foot%}
        {%endblock%}
    </div>
</body>

在扩展new_base.html的模板中,我添加了以下几行:

@frame header {
    -pdf-frame-content: page-header;
    top: 0cm;
    margin-top: 0.5cm;
    margin-bottom: 0.5cm;
    margin-left: 1cm;
    margin-right: 1cm;
    height: 5cm;
}

现在,这会在文档的每个页面上呈现页眉。

答案 1 :(得分:0)

我最近遇到了同样的问题,@ user3745794给出的答案对我帮助很大。

我的模板略有不同,但在这里它们可以帮助有同样问题的人。

<强>模板/ easy_pdf / base.html文件

<!DOCTYPE html>
<html>
    <head>
        <title>{% block page_title %}{% endblock %}</title>

        {% block style_base %}
            {% block layout_style %}
                <style type="text/css">
                    @page {
                        size: {{ pagesize|default:"A4" }};
                        margin-left: 1cm;
                        margin-right: 1cm;

                        @frame header {
                            -pdf-frame-content: page-header;
                            margin-top: 1.0cm;
                            margin-left: 1cm;
                            margin-right: 0.5cm;
                            margin-bottom: 0.5cm;
                            height: 3cm;
                        }

                        @frame content {
                            top: 0.5cm;
                            margin-top: 3.5cm;
                            margin-bottom: 0.5cm;
                            margin-left: 1.75cm;
                            margin-right: 1.5cm;
                        }

                        @frame footer {
                            -pdf-frame-content: page-footer;
                            bottom: 0cm;
                            margin-left: 1cm;
                            margin-right: 1.5cm;
                            height: 2cm;
                        }
                    }
                </style>
            {%endblock%}
            {% block extra_style %}{% endblock %}
        {% endblock %}

    </head>

    <body>
        <div id="page-header">
            {%block page_header%}
            {%endblock%}
        </div>

        <div id="page-content">
            {%block page_content%}
            {%endblock%}
        </div>

        <div id="page-footer">
            {%block page_foot%}
            {%endblock%}
        </div>

    </body>
</html>

在我的模板 templates / report.html

{% extends "easy_pdf/base.html" %}

{% load static %}

{% block page_title %}
    {# Page title here #}
{% endblock %}

{% block extra_style %}
    <style type="text/css">
        {# Extra CSS styles here #}
    </style>
{% endblock %}

{% block page_header %}
    {% include "header.html" %}
{% endblock %}

{% block page_content %}

    {# Page 1 #}

    <pdf:nextpage />

    {# Page 2 #}

    <pdf:nextpage />

    {# Page 3 #}

{% endblock %}

{% block page_foot %}
    {% include "footer.html" %}
{% endblock %}

<强>模板/ header.html中

<h1>Hello World!!!</h1>

<强>模板/ footer.html

<h1>Goodbye World!!!</h1>

希望它有所帮助;)。