Skip to Content
Menu
This question has been flagged
6 Replies
17507 Views

I need to show footer only on the last page of a pdf report. It's possibile or I'm a dreamer?

Avatar
Discard

AFAIK, there's no official way to achieve that but, considering this: https://github.com/odoo/odoo/blob/8.0/addons/report/static/src/js/subst.js you can hide/show you footer by checking the page number (via custom javascript). For instance, you'll find the page number and the total number of pages here in the default report layout: https://github.com/odoo/odoo/blob/8.0/addons/report/views/layouts.xml#L107

converted my answer to comment by mistake and it deleted your comment...sorry. btw, i tested it and you're right. that doen't work :(

Best Answer

Hello Francesco I have been wanting to submit this to odoo for quite a while and maybe I will, here is how I did it:

        <template id="report_minimal_layout" inherit_id="report.minimal_layout" >
            <xpath expr="//head" position="inside">
              <script src='/module_name/static/js/pagination_hide.js'></script> <-- Must be added in the module -->
            </xpath>

            <xpath expr="//body" position="attributes">
                <attribute t-translation="off" name="onload">subst(); pagination_hide();</attribute>
            </xpath>
        </template>

Contents of the js file:

function pagination_hide() {
    var vars = {};
    var x = document.location.search.substring(1).split('&');
    for (var i in x) {
        var z = x[i].split('=', 2);
        vars[z[0]] = unescape(z[1]);
    }

    if (vars['page'] <= 1){
        hidden_nodes = document.getElementsByClassName("hide_firstpage");
        for (i = 0; i < hidden_nodes.length; i++) {
            hidden_nodes[i].style.visibility = "hidden";
        }
    }

    if (vars['page'] == vars['topage']){
        hidden_nodes = document.getElementsByClassName("show_lastpage");
        for (i = 0; i < hidden_nodes.length; i++) {
            hidden_nodes[i].style.display = "block";
        }
    }

    if (vars['page'] == 1){
        hidden_nodes = document.getElementsByClassName("show_firstpage");
        for (i = 0; i < hidden_nodes.length; i++) {
            hidden_nodes[i].style.display = "block";
        }
    }
}

Of course this will not actually remove the footer and allow for the body content to stretch to the very bottom but it show/hides depending on the page it is on using css to alter the display property

After doing this you can use these helper classes which do pretty much what they say

 

 

Avatar
Discard
Best Answer

Hello Francesco,

This module from OCA can solve your problem

https://github.com/OCA/reporting-engine/tree/8.0/report_qweb_element_page_visibility

Avatar
Discard
Best Answer

A module implemeting a magical `last-page` class has been developed (by me) to showcase a basic possible implementation.

    https://github.com/0k/report_extended

A stackoverflow answer explain how this works in a viable place for posting code:

    http://stackoverflow.com/questions/28172283/checking-for-last-page-in-qweb-reports-in-odoo

Nice similar solution also on this blog post:

    http://planet.agilebg.com/en/2014/05/how-to-add-html-element-at-the-bottom-of-the-last-page-of-webkit-report/ 

Avatar
Discard
Best Answer

Hello ,

Here i have given answer for this question!

Click Here

Hope this will help,

Regards,

Anil.


Avatar
Discard