Ich verwende eine CSS-Eigenschaft.
Wenn ich page-break-after: always;
=> verwende, wird zuvor eine zusätzliche leere Seite gedruckt
Wenn ich page-break-before: always;
=> verwende, wird danach eine zusätzliche leere Seite gedruckt. Wie vermeide ich das?
<!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>
Antworten:
Sie könnten vielleicht hinzufügen
Das letzte
print
Element erhält also keinen zusätzlichen Seitenumbruch.Beachten Sie, dass der Selektor: last-child in IE8 nicht unterstützt wird, wenn Sie auf das Elend eines Browsers abzielen.
quelle
Hast du das versucht?
quelle
height: 100%
. Ich konnte dies mitheight: auto
height: auto;
ist auch eleganter alsheight: 99%;
Die hier beschriebene Lösung hat mir geholfen ( Webarchiv-Link ).
Zunächst können Sie allen Elementen einen Rahmen hinzufügen, um zu sehen, warum eine neue Seite angehängt wird (möglicherweise einige Ränder, Auffüllungen usw.).
Die Lösung selbst bestand darin, die folgenden Stile hinzuzufügen:
quelle
Wenn keines dieser Verfahren funktioniert, versuchen Sie dies
Stellen Sie sicher, dass es 100vh ist
quelle
Das funktioniert bei mir
quelle
Wenn Sie nur CSS verwenden und Seitenumbrüche vermeiden möchten, verwenden Sie
Schauen Sie sich ausgelagerte Medien an
Sie können Skriptäquivalente für pageBreakBefore und pageBreakAfter verwenden und deren Werte dynamisch zuweisen. Anstatt Ihren Besuchern benutzerdefinierte Seitenumbrüche aufzuzwingen, können Sie beispielsweise ein Skript erstellen, um dies optional zu machen. Hier erstelle ich ein Kontrollkästchen, das zwischen dem Schneiden der Seite in den Kopfzeilen (h2) und dem Ermessen des Druckers (Standard) umschaltet:
Klicken Sie hier für ein Beispiel, das dies verwendet. Sie können H2 im Skript durch ein anderes Tag wie P oder DIV ersetzen.
http://www.javascriptkit.com/dhtmltutors/pagebreak.shtml
quelle
Ich weiß (bis jetzt) nicht warum, aber dieser hat geholfen:
Hoffe, jemand wird seine Haare retten, während er mit dem Problem kämpft ...;)
quelle
Set
display:none
für alle anderen Elemente, die nicht für Drucke bestimmt sind. Die Einstellungvisibility:hidden
hält sie versteckt, aber sie sind alle noch da und haben Platz für sie genommen. Die leere Seite ist für diese versteckten Elemente.quelle
Es scheint, dass es viele mögliche Ursachen gibt, wobei das wahrscheinliche Thema darin besteht, dass das Body-Tag eine Höhe hat, die aus irgendeinem Grund als zu groß angesehen wird.
Meine Ursache:
min-height: 100%
in einem Basis-Stylesheet.Meine Lösung:
min-height: auto
in einer@media print
Richtlinie.Beachten Sie, dass
auto
es laut PhpStorm kein korrekter Wert zu sein schien. Laut Mozillas Dokumentation zur Mindesthöhe ist dies jedoch korrekt :quelle
initial
da ich davon ausgegangen bin, dass es für dynamisch dimensionierte Elemente problematisch ist. Beachten Sie, dass der Anfangswert 0 ist, daher gehe ich immer noch davon aus, dass diesauto
im Allgemeinen nützlicher ist.In meinem Fall hat das Einstellen der Breite für alle Divs geholfen:
quelle
Ich habe die CSS-Anzeige und die Breite des Druckbereichs geändert
quelle
Ich hatte ein ähnliches Problem, aber die Ursache war, dass ich am unteren Rand der Seite einen Rand von 40 Pixel hatte, sodass die allerletzte Zeile immer umbrochen wurde, selbst wenn auf der letzten Seite Platz dafür war. Nicht wegen irgendeiner Art von
page-break-*
CSS-Befehl. Ich habe das Problem behoben, indem ich den Rand beim Drucken entfernt habe, und es hat gut funktioniert. Ich wollte nur meine Lösung hinzufügen, falls jemand anderes etwas Ähnliches hat!quelle
Nachdem ich mit verschiedenen Einstellungen und Höhen für Seitenumbrüche und einer Million verschiedener CSS-Regeln für das Body-Tag zu kämpfen hatte, löste ich es schließlich über ein Jahr später.
Ich habe ein Div, das das einzige auf der Seite sein soll, das gedruckt wird, aber ich habe danach mehrere leere Seiten bekommen. Mein Body-Tag ist auf eingestellt,
visibility:hidden;
aber das war nicht genug. Vertikal hohe Seitenelemente nehmen immer noch Platz ein. Also habe ich dies in meine Print-CSS-Regeln aufgenommen:um bestimmte Divs anhand ihrer IDs anzuvisieren, die große Seitenlayoutelemente enthalten. Ich habe die Höhe verkleinert und sie dann aus dem Layout entfernt. Keine leeren Seiten mehr. Jahre später freue ich mich, meinem Kunden mitteilen zu können, dass ich es geknackt habe. Hoffe das hilft jemandem.
quelle
visibility: hidden;
es immer noch Platz ein. Wenn Siedisplay: none;
das Leerzeichen verwenden, wird es entfernt. An diesem Punkt müssen Sie die Höhe nicht speziell einstellen, sondern nur zu Ihrer Information.Chrome scheint einen Fehler zu haben, bei dem in bestimmten Situationen das Ausblenden von Elementen nach dem Laden mit der Anzeige: Keine, viel zusätzlichen Platz hinterlässt. Ich würde vermuten, dass sie die Dokumenthöhe berechnen, bevor das Dokument gerendert ist. Chrome löst auch 2 Medienwechselereignisse aus und unterstützt onbeforeprint usw. nicht. Sie sind im Grunde genommen das Drucken. Hier ist meine Problemumgehung:
Sie geben body class = "Drucken" auf doc ready an, und das aktiviert die Druckstile. Dieses System ermöglicht die Modularisierung von Druckstilen und die Druckvorschau im Browser.
quelle
Fügen Sie dieses CSS derselben Seite hinzu, um die CSS-Datei zu erweitern.
quelle
Ich habe alle Lösungen ausprobiert, das funktioniert bei mir:
quelle
Ich bin gerade auf einen Fall gestoßen, bei dem ein Wechsel von
zu
Dieses Problem wurde behoben.
quelle
Das hat bei mir funktioniert.
quelle
Das seltsame Setzen eines transparenten Rahmens löste dies für mich:
Möglicherweise reicht es aus, den Rand für das Containerelement festzulegen. <- Nicht testen.
quelle
Keine der Antworten funktionierte mit mir, aber nachdem ich alle gelesen hatte, fand ich heraus, was das Problem in meinem Fall war. Ich habe 1 HTML-Seite, die ich drucken möchte, aber es wurde eine zusätzliche weiße leere Seite damit gedruckt. Ich verwende AdminLTE, ein Bootstrap 3-Thema für die Seite des Berichts, das gedruckt werden soll, und darin das Fußzeilentag, mit dem ich diesen Text unten rechts auf der Seite platzieren wollte:
Ich habe jquery verwendet, um diesen Text anstelle der vorherigen Fußzeile "Copy Rights" mit zu setzen
und standardmäßig verwendet die Tag-Fußzeile im Thema die Klasse .main-footer mit den Attributen
Das verursachte einen zusätzlichen Leerraum. Nachdem ich das Problem gekannt hatte, hatte ich verschiedene Optionen, und die beste Option war die Verwendung
Nur auf dieser speziellen Seite
quelle
Fügen Sie das benötigte Material auf eine Seite in einem Div ein und verwenden Sie den Seitenumbruch: Vermeiden Sie dieses Div. Ihr Div bleibt auf einer Seite und wechselt bei Bedarf auf eine zweite oder dritte Seite. Das nächste Div sollte jedoch auf der nächsten Seite beginnen, falls es einen Seitenumbruch durchführen muss.
quelle
Überprüfen Sie, ob nach dem HTML-Tag unten ein Leerzeichen vorhanden ist. Entfernen Sie alle Leerzeichen unten, die mir geholfen haben
quelle