La génération d'en-tête/pied de page avec la soucoupe volante (xHTMLRenderer) et de la bibliothèque iText

Je me rends compte que cette question a été posée (j'ai regardé toutes les solutions et tous essayés), mais je suis encore à essayer de générer un document pdf avec un en-tête et pied de page qui se répètent sur chaque page.

Je suis en utilisant flying saucer R8 avec iText2.0.8 j'ai essayé beaucoup de différentes méthodes pour le faire fonctionner, mais jusqu'à présent sans succès. Certaines méthodes que j'ai testé étaient https://gist.github.com/626264, à l'aide de l'exécution des éléments et de la marge boxs http://pigeonholdings.com/projects/flyingsaucer/R8/doc/guide/users-guide-R8.html#xil_40 css3 (fonction), un guide pour la soucoupe volante r7 qui ne fonctionne pas pour r8 http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html#page-specific-features, avec de nombreuses autres méthodes qui ne fonctionnent pas pour moi.

Mon en-tête div contient 2 autres divs avec des images et mon pied de page est juste pour la numérotation des pages. Le code html est en cours de mise en StringBuffer appelé buf.

buf.append("<head>");
    buf.append("<title>blabla</title> ");
    buf.append("<style type='text/css' media='print'>  ");
    buf.append("@page { size:8.5in 11in; padding:1em; @bottom-left { content: element(footer); } } ");
    buf.append("#footer { font-size: 90%; font-style: italic;  position: running(footer); top: 0; left: 0; }");
    buf.append("#pagenumber:before { content: counter(page); } ");
    buf.append("#pagecount:before { content: counter(pages); } ");
buf.append("</style></head>");
buf.append("<body>");
 buf.append("<div class='header' style='clear:both;'>");
    buf.append("<div id='moneyLogo' style='float:left'>"); 
    buf.append("<img src='logo.jpg' alt='Some alt text' />");
    buf.append("</div>");
    buf.append("<div id='canLogo' style='float:right'>");
    buf.append("<img src='someImg.gif' alt='alt text' />");
    buf.append("</div>");
    buf.append("<h3 style='text-align:center; clear:both;'>alt text</h3>");
    buf.append("<div style='text-align:center;'>");
    buf.append("Some texy text");
    buf.append("<br />"););
    buf.append("</div>");
    buf.append("</div><br /><br />");
buf.append("<div id='footer'>  Page <span id='pagenumber'/> of <span id='pagecount'/> </div>");

    buf.append("</body>");
    buf.append("</html>");

Mon pdf génère bien sauf pour le fait que l'en-tête s'affiche uniquement sur la première page et le pied de page ne s'affiche sur le bas de la dernière page. Quand j'ai mis le code html par le validateur du w3c, il est sorti très bien, mais lorsque j'ai utilisé leur validateur CSS il a dit que leur les erreurs d'analyse dans la ligne @page { size:8.5in 11in; padding:1em; @bottom-left { content: element(footer); } }

Autant que je pourrais dire de tous les guides que j'ai lu c'était bien. J'ai aussi entendu dire que le validateur CSS du W3C a été incomplète pour CSS3, les specs, j'ai donc supposé que c'était le validateur qui avait tort.

Si quelqu'un pouvait me donner quelques conseils sur l'endroit ou les idées que ma semaine 🙂

p.s. A utiliser en soucoupe Volante R8 et/ou de la bibliothèque iText 2.0.8

  • Laisser un commentaire pour les futurs utilisateurs: Si le pied de page n'est pas en cours d'exécution sur toutes les pages pour flyingsaucer assurez-vous que le pied de page de l'élément est AVANT le contenu qui est à la différence des pages HTML. Vous pouvez voir les exemples ci-dessous par @Giovanni qui montre que les en-tête et pied de page sont avant le contenu. Votre code est correct, c'est juste que l'en-tête et pied de page doivent être placés avant le contenu et c'est très contre-intuitif