CSS Print
La principale méthode pour créer des PDFs imprimables avec des technologies du web consiste à utiliser la fonctionnalité imprimer du navigateur, de préférence sur Chromium ou Chrome.
Le CSS permet de créer des feuilles de style spécifiques à l'écran et à l'impression. Grâce à cette fonctionnalité appelé media print
, il est possible d'avoir un design différent entre le rendu écran et le rendu print, et même un contenu différent.
Fonctionnement du css print
@media print {
Votre CSS spécifique pour le print ici
}
Définir le format de la page
@media print {
@page{size: A4;}
/* ou */
@page{size: 21cm 29.7cm;}
}
Définir les marges
/* Définir les marges */
@page { margin: 2cm }
/* Définir les marges de la page de gauche */
@page :left { margin: 1cm; }
/* Définir les marges de la page de droite */
@page :right { margin: 1cm; }
/* Définir les marges sur la première page, il est aussi possible de sélectionner une page en particulier */
@page :first {margin: 1cm 2cm;}
Attention, si vous voulez imprimer avec un fond de couleur, les marges seront blanches.
Sauts de page
Les 3 propriétés CSS page-break-before
, page-break-after
, et page-break-inside
permettent de définir à quel endroit faire des sauts de page ou non.
page-break-before
permet de gérer un saut de page avant un élément HTML.page-break-after
permet de gérer un saut de page après un élément HTML.page-break-inside
empêche un élément HTML de se couper en deux sur deux pages (comme les images par exemple)
/* Ces propriétés prennent comme valeur: */
page-break-after : auto | always | avoid
page-break-before : auto | always | avoid
page-break-inside : auto | avoid
auto
est la valeur standard, always
ajoute un saut de page à chaque fois, avoid
empêche un saut de page.
Par exemple:
h1, h2, h3, h4, h5, h6 {
page-break-after:avoid;
}
img {
page-break-inside:avoid;
}
Avoir des contenus différents en le web et le print
Il est possible de cacher certains éléments sur le web et de les afficher sur la version print et vice-versa
@media screen{
h1{display:none;}
}
@media print{
img{display:none}
}