Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.6k views
in Technique[技术] by (71.8m points)

ruby on rails - wicked_pdf: Is it possible to have the header only show on the first page & the footer only on the last?

Right now I have :header => {:html => {:template => "layouts/pdf_header.html.erb"}} setting things up. Is there something I can pass in that will only show the header on the first page of the document?

Can I do this for the footer as well? It's almost more important here, because I can't really think of any other way to get a footer to dynamically stick to the bottom of the page when it's going to be different lengths and different numbers of pages every time.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Some quick javascript can take care of this. Follow the boilerplate laid out under 'Footers And Headers' on wkhtmltopdf

These are your header and footer templates respectively. The key variable to keep track of is 'page' which is available from URL hash. Your header will look something like this:

<div class="headerContent" style="display:none">
   ...my awesome html
    <hr />
</div>
<script type="text/javascript">
    var headerCheck = function() {
      var x=document.location.search.substring(1).split('&');
      for (var i in x) {
        if(x[i] == "page=1")
          document.getElementsByClassName("headerContent")[0].style.display = "block";
       }
     }();
</script>

Similarly for your footer the code will look something like this:

<div class="footerContent" style="display: none">
    ...awesome footer html
</div>
<script type="text/javascript">
    var footerCheck = function() {
       var x=document.location.search.substring(1).split('&');
       var currentPage = 1;
       for (var i in x) {
         var z=x[i].split('=',2);
         if(z[0] == "page")
           currentPage = unescape(z[1]);
         if(z[0] == "topage" && currentPage == unescape(z[1]))
           document.getElementsByClassName("footerContent")[0].style.display = "block";
        }
     }();
 </script>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...