587 votes

En-tête et pied de page d'impression HTML

Est-il possible d'imprimer des pages HTML avec des en-têtes et des pieds de page personnalisés sur chaque page imprimée ?

J'aimerais ajouter le mot "UNCLASSIFIED" en rouge, Arial, taille 16pt en haut et en bas de chaque imprimé page, quel que soit son contenu.

Pour clarifier, si le document a été imprimé sur 5 pages, chaque page doit avoir l'en-tête et le pied de page personnalisés.

Quelqu'un sait-il si cela est possible en utilisant HTML/CSS ?

Merci d'avance !

3 votes

0 votes

J'ai posté une solution compatible avec Chrome ici qui ajoutera un en-tête courant aux documents qui ne contiennent pas de trop grandes étendues de texte. Mais il n'y a toujours pas de solution pour les pieds de page.

7 votes

Solution combinée : les deux pisition: fixed y thead tbody tfoot Les techniques ont des inconvénients, vous devez donc les combiner, lire la suite ici .

386voto

Infotekka Points 4668

Si vous prenez l'élément qui sera le pied de page et que vous le définissez comme étant position:fixed et bottom:0, lorsque la page sera imprimée, cet élément sera répété au bas de chaque page imprimée. Le même principe s'applique à un élément d'en-tête, mais il suffit de définir top:0 à la place.

Par exemple :

<div class="divFooter">UNCLASSIFIED</div>

CSS :

<style type="text/css">
    @media screen {
        div.divFooter {
            display: none;
        }
    }
    @media print {
        div.divFooter {
            position: fixed;
            bottom: 0;
        }
    }
</style>

77 votes

Cela ne semble pas fonctionner si vous avez un élément qui s'étend sur deux pages (pre dans mon cas) - le pied de page sera écrasé sur celui-ci.

7 votes

Oui, malheureusement, c'est vrai, puisque vous utilisez un positionnement fixe sur l'élément de pied de page, il chevauchera tous les éléments qui se trouvent sous lui. Vous pouvez peut-être modifier vos marges et essayer de positionner le pied de page en dehors de la marge de la zone de contenu dans laquelle se trouve votre préface.

78 votes

Il semble que les navigateurs webkit ne supportent pas cela correctement. Corrigez-moi si je me trompe !

157voto

Ian Boyd Points 50743

Je pense que la réponse correcte est que HTML 5 et CSS3 ne prennent pas en charge l'impression des en-têtes et des pieds de page dans les pages de l'UE. print médias.

Et bien que vous puissiez être capable de le simuler avec :

  • tableaux
  • blocs à position fixe

ils présentent tous des défauts qui les empêchent d'être la solution générale idéale.

43 votes

Ne vous fiez pas aux autres réponses. Elles peuvent fonctionner dans des cas particuliers, mais sont généralement très mauvaises. Il n'y a pas de solution fiable tant que les boîtes de marge @page ne sont pas implémentées dans les principaux navigateurs. Voir : fr.wikipedia.org/wiki/

27 votes

Malheureusement, je dois voter pour celui-là. Même si nous avons l'année 2018 pourquoi le pirate ne nous donne pas un @footer con content:"stuff" ou similaire.

2 votes

Il y a en fait une spécification en cours d'élaboration à W3C pour répondre à ces scénarios.

17voto

rweavere Points 56

J'ai cherché pendant des années une solution et j'ai trouvé ce post sur comment imprimer un pied de page qui fonctionne sur plusieurs pages sans chevaucher le contenu de la page.

Mon exigence était IE8, jusqu'à présent j'ai constaté que cela ne fonctionne pas dans Chrome.

Cet exemple utilise des tableaux et l'élément tfoot en définissant le style css :

tfoot {display: table-footer-group;}

2 votes

Cela fonctionne dans tous les navigateurs et dans asp (qui a un problème fou avec les pieds de page) Utilisez ceci je dis.

19 votes

@DWolf Le premier commentaire me donne un énorme espoir. Et tu me détruis en une phrase juste après ça.

0 votes

En fait, cela a fonctionné dans Chrome. Je n'ai pas réussi à le faire fonctionner dans une très ancienne version de Chromium basée sur Linux, mais Chrome fonctionnait parfaitement.

11voto

Paul Sweatte Points 8668

Utilisez Sauts de page pour définir les styles en CSS :

@media all
  {
  #page-one, .footer, .page-break { display:none; }
  }

@media print
  {
  #page-one, .footer, .page-break   
    { 
    display: block;
    color:red; 
    font-family:Arial; 
    font-size: 16px; 
    text-transform: uppercase; 
    }
  .page-break
    {
    page-break-before:always;
    } 
}

Ajoutez ensuite le balisage dans le document aux endroits appropriés :

<h2 id="page-one">unclassified</h2>
<!-- content block -->
<h2 class="footer">unclassified</h2>
<h2 class="page-break">unclassified</h2>
<!-- content block -->
<h2 class="footer">unclassified</h2>
<h2 class="page-break">unclassified</h2>
<!-- content block -->
<h2 class="footer">unclassified</h2>
<h2 class="page-break">unclassified</h2>
<!-- content block -->
<h2 class="footer">unclassified</h2>
<h2 class="page-break">unclassified</h2>

36 votes

Cette option ne permet pas d'imprimer un en-tête et un pied de page sur chaque page. Elle spécifie plusieurs "pages" au mieux. Si vous ne connaissez pas la hauteur de votre document (nombre de pages), elle est inutile.

0 votes

@rainabba if the document was printed onto 5 pages

4 votes

Ce n'était qu'un exemple, qui ne doit pas être utilisé pour guider précisément vos réponses.

10voto

Blazemonger Points 39230

De cette question -- ajouter les styles suivants à une feuille de style pour l'impression seulement. Cette solution fonctionnera dans IE et Firefox, mais pas dans Chrome (à partir de la version 21) :

#header {
  display: table-header-group;
}

#main {
  display: table-row-group;
}

#footer {
  display: table-footer-group;
}

1 votes

J'ai trouvé cette solution qui est la seule qui fonctionne. Je n'ai pas testé tous les navigateurs mais ça marche dans Firefox !

2 votes

2017 et encore ne fonctionne pas dans Chrome ! mais fonctionne dans Firefox

0 votes

@MehdiDehghani : ma faute j'enlève le commentaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X