J'utilise une propriété CSS,
Si j'utilise page-break-after: always;
=> Il imprime une page vierge supplémentaire avant
Si j'utilise page-break-before: always;
=> Il imprime une page vierge supplémentaire après. Comment éviter cela?
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
.print{
page-break-after: always;
}
</style>
<script type="text/javascript">
window.print();
</script>
</head>
<body>
<div class="print">fd</div>
<div class="print">fdfd</div>
</body>
</html>
<div>This page intentionally left blank.</div>
Réponses:
Vous pourriez peut-être ajouter
.print:last-child { page-break-after: auto; }
donc le dernier
print
élément n'obtiendra pas le saut de page supplémentaire.Notez que le sélecteur: last-child n'est pas pris en charge dans IE8, si vous ciblez ce misérable navigateur.
la source
Avez-vous essayé cela?
@media print { html, body { height: 99%; } }
la source
height: 100%
. J'ai pu remplacer cela avecheight: auto
height: auto;
plus élégant queheight: 99%;
La solution décrite ici m'a aidé ( lien webarchive ).
Tout d'abord, vous pouvez ajouter une bordure à tous les éléments pour voir ce qui provoque l'ajout d'une nouvelle page (peut-être des marges, des rembourrages, etc.).
div { border: 1px solid black;}
Et la solution elle-même était d'ajouter les styles suivants:
html, body { height: auto; }
la source
si Aucun de ces travaux, essayez ceci
@media print { html, body { height:100vh; margin: 0 !important; padding: 0 !important; overflow: hidden; } }
assurez-vous que c'est 100vh
la source
Cela fonctionne pour moi
.print+.print { page-break-before: always; }
la source
Si vous voulez juste utiliser CSS et que vous voulez éviter les sauts de page, utilisez
.print{ page-break-after: avoid; }
Jetez un œil aux médias paginés
Vous pouvez utiliser des équivalents de script pour pageBreakBefore et pageBreakAfter, affecter dynamiquement leurs valeurs. Par exemple, au lieu de forcer des sauts de page personnalisés à vos visiteurs, vous pouvez créer un script pour rendre cela facultatif. Ici, je vais créer une case à cocher qui bascule entre le découpage de la page dans les en-têtes (h2) et à la discrétion de l'imprimante (par défaut):
<form name="myform"> <input type="checkbox" name="mybox" onClick="breakeveryheader()"> </form> <script type="text/javascript"> function breakeveryheader(){ var thestyle=(document.forms.myform.mybox.checked)? "always" : "auto" for (i=0; i<document.getElementsByTagName("H2").length; i++) document.getElementsByTagName("H2")[i].style.pageBreakBefore=thestyle }
Cliquez ici pour un exemple qui l'utilise. Vous pouvez remplacer H2 dans le script par une autre balise telle qu'un P ou DIV.
http://www.javascriptkit.com/dhtmltutors/pagebreak.shtml
la source
Je ne sais pas (pour l'instant) pourquoi, mais celui-ci a aidé:
@media print { html, body { border: 1px solid white; height: 99%; page-break-after: avoid; page-break-before: avoid; } }
J'espère que quelqu'un sauvera ses cheveux tout en luttant contre le problème ...;)
la source
Il semble qu'il y ait beaucoup de causes possibles, le thème probable étant que la balise body se retrouve avec une hauteur considérée comme trop grande pour une raison quelconque.
Ma cause:
min-height: 100%
dans une feuille de style de base.Ma solution:
min-height: auto
dans une@media print
directive.Remarque,
auto
ne semble pas être une valeur correcte, selon PhpStorm. Cependant, il est correct selon la documentation de Mozilla sur min-height :la source
initial
car je supposais que ce serait problématique pour les éléments de taille dynamique. Notez que la valeur initiale est 0, donc je suppose toujours queauto
c'est généralement plus utile.défini
display:none
pour tous les autres éléments qui ne sont pas destinés aux impressions. le réglagevisibility:hidden
les gardera cachés, mais ils sont tous toujours là et ont pris de la place pour eux. la page vide est pour ces éléments cachés.la source
Dans mon cas, définir la largeur de tous les divs a aidé:
.page-content div { width: auto !important; max-width: 99%; }
la source
J'ai changé l'affichage css et la propriété width de la zone d'impression
#printArea{ display:table; width:100%; }
la source
J'ai eu un problème similaire, mais la cause était parce que j'avais 40px de marge en bas de la page, donc la toute dernière ligne serait toujours enveloppée même s'il y avait de la place pour cela sur la dernière page. Pas à cause de toute sorte de
page-break-*
commande css. J'ai corrigé en supprimant la marge sur l'impression et cela a bien fonctionné. Je voulais juste ajouter ma solution au cas où quelqu'un d'autre aurait quelque chose de similaire!la source
Après avoir lutté avec divers paramètres et hauteurs de saut de page et un million de règles CSS différentes sur la balise body, je l'ai finalement résolu plus d'un an plus tard.
J'ai un div qui est censé être la seule chose sur la page qui s'imprime, mais j'obtenais plusieurs pages vierges après. Ma balise corporelle est définie sur
visibility:hidden;
mais ce n'était pas suffisant. Les éléments de page verticalement hauts prennent toujours de la «place». J'ai donc ajouté ceci dans mes règles CSS d'impression:pour cibler des div spécifiques par leurs identifiants qui contiennent de grands éléments de mise en page. J'ai réduit la hauteur, puis je les ai supprimées de la mise en page. Plus de pages blanches. Des années plus tard, je suis heureux de dire à mon client que je l'ai craqué. J'espère que cela aide quelqu'un.
la source
visibility: hidden;
cela prendra encore de la place. Si vous utilisezdisplay: none;
l'espace sera supprimé. À ce stade, vous n'aurez pas besoin de définir spécifiquement la hauteur, juste pour info.Chrome semble avoir un bogue où, dans certaines situations, masquer des éléments après le chargement avec l'affichage: aucun, laisse beaucoup d'espace supplémentaire derrière. Je suppose qu'ils calculent la hauteur du document avant que le document ne soit rendu. Chrome déclenche également 2 événements de changement de média, et ne prend pas en charge onbeforeprint, etc. Ils sont essentiellement le ie de l'impression. Voici ma solution de contournement:
@media print { body { display: none; } } body.printing { display: block; }
Vous donnez body class = "printing" sur doc ready, et cela active les styles d'impression. Ce système permet la modularisation des styles d'impression et l'aperçu avant impression dans le navigateur.
la source
Ajoutez ce css à la même page pour étendre le fichier css.
<style type="text/css"> <!-- html, body { height: 95%; margin: 0 0 0 0; } --> </style>
la source
J'ai essayé toutes les solutions, cela fonctionne pour moi:
<style> @page { size: A4; margin: 1cm; } .print { display: none; } @media print { div.fix-break-print-page { page-break-inside: avoid; } .print { display: block; } } .print:last-child { page-break-after: auto; } </style>
la source
Je viens de rencontrer un cas où changer de
</div> <script src="addressofjavascriptfile.js"></script> </body> </html>
à
<script src="addressofjavascriptfile.js"></script> </div> </body> </html>
résolu ce problème.
la source
.print:last-child{ page-break-after: avoid; page-break-inside: avoid; margin-bottom: 0px; }
Cela a fonctionné pour moi.
la source
Étrangement, définir une bordure transparente a résolu ceci pour moi:
@media print { div { border: 1px solid rgba(0,0,0,0) } }
Il suffira peut-être de définir la bordure sur l'élément conteneur. <- Untestet.
la source
Aucune des réponses n'a fonctionné avec moi, mais après les avoir toutes lues, j'ai compris quel était le problème dans mon cas.J'ai 1 page Html que je veux imprimer mais j'imprimais avec elle une page blanche supplémentaire. J'utilise AdminLTE un thème bootstrap 3 pour la page du rapport à imprimer et dans celui-ci la balise de pied de page que je voulais placer ce texte en bas à droite de la page:
J'ai utilisé jquery pour mettre ce texte au lieu du précédent pied de page "Droits de copie" avec
$("footer").html("Printed by Mr. Someone");
et par défaut dans le thème le pied de page de la balise utilise la classe .main-footer qui a les attributs
padding: 15px; border-top: 1px solid
cela a causé un espace blanc supplémentaire, donc après avoir connu le problème, j'avais différentes options, et la meilleure option était d'utiliser
$( "footer" ).removeClass( "main-footer" );
Juste dans cette page spécifique
la source
Mettez les éléments dont vous avez besoin sur une page dans un div et utilisez le saut de page à l'intérieur: évitez ce div. Votre div restera sur une page et passera sur une deuxième ou troisième page si nécessaire, mais le div suivant, s'il doit faire un saut de page, devrait commencer à la page suivante.
la source
Vérifiez s'il y a un espace blanc après la balise html en bas. Supprimer tous les espaces ci-dessous m'a aidé
la source