Wie drucke ich das angegebene div (ohne alle anderen Inhalte auf der Seite manuell zu deaktivieren)?
Ich möchte einen neuen Vorschaudialog vermeiden, daher ist das Erstellen eines neuen Fensters mit diesem Inhalt nicht sinnvoll.
Die Seite enthält einige Tabellen, eine davon enthält das Div, das ich drucken möchte. Die Tabelle enthält visuelle Stile für das Web, die nicht gedruckt werden sollten.
javascript
css
printing
dhtml
Noesgard
quelle
quelle
Antworten:
Hier ist eine allgemeine Lösung, die nur CSS verwendet und deren Funktion ich überprüft habe.
Alternative Ansätze sind nicht so gut. Die Verwendung
display
ist schwierig, da bei einem Element auchdisplay:none
keiner seiner Nachkommen angezeigt wird. Um es zu verwenden, müssen Sie die Struktur Ihrer Seite ändern.Die Verwendung
visibility
funktioniert besser, da Sie die Sichtbarkeit für Nachkommen aktivieren können. Die unsichtbaren Elemente wirken sich jedoch immer noch auf das Layout aus, sodass ich michsection-to-print
nach links oben bewege , damit es richtig gedruckt wird.quelle
position:fixed
stattdessen. Chrome und Safari würden jedoch auch Inhalte abschneiden, insbesondere nach der ersten Seite. So war meine letzte Abhilfe sowohl das Ziel gesetzt und alle seine Eltern aufoverflow:visible; position:absolute !important; top:0;left:0
#section-to-print
entspricht dem Abschnitt selbst;#section-to-print *
stimmt mit jedem Unterelement des Abschnitts überein. Diese Regel macht also nur den Abschnitt und seinen gesamten Inhalt sichtbar.Ich habe eine bessere Lösung mit minimalem Code.
Platzieren Sie Ihr druckbares Teil in einem Div mit einer ID wie folgt:
Fügen Sie dann ein Ereignis wie einen Onclick hinzu (wie oben gezeigt) und übergeben Sie die ID des Div wie oben beschrieben.
Jetzt erstellen wir ein wirklich einfaches Javascript:
Beachten Sie, wie einfach das ist? Keine Popups, keine neuen Fenster, kein verrücktes Styling, keine JS-Bibliotheken wie jquery. Das Problem mit wirklich komplizierten Lösungen (die Antwort ist nicht kompliziert und nicht das, worauf ich mich beziehe) ist die Tatsache, dass sie NIEMALS in allen Browsern übersetzt wird! Wenn Sie die Stile unterscheiden möchten, gehen Sie wie in der aktivierten Antwort gezeigt vor, indem Sie das Medienattribut einem Stylesheet-Link hinzufügen (media = "print").
Kein Flaum, leicht, es funktioniert einfach.
quelle
.click
. Es ist eine Schande, weil der Code so leicht ist.Alle bisherigen Antworten sind ziemlich fehlerhaft - sie beinhalten entweder das Hinzufügen
class="noprint"
zu allem oder werden darin durcheinanderdisplay
geraten#printable
.Ich denke, die beste Lösung wäre, einen Wrapper um das nicht druckbare Material zu erstellen:
Natürlich ist dies nicht perfekt, da es darum geht, Dinge in Ihrem HTML-Code ein wenig zu verschieben ...
quelle
Mit jQuery ist das so einfach:
quelle
Könnten Sie ein Druck-Stylesheet verwenden und CSS verwenden, um den gewünschten Inhalt anzuordnen? Lesen Sie diesen Artikel für weitere Hinweise.
quelle
Das funktioniert gut:
Beachten Sie, dass dies nur mit "Sichtbarkeit" funktioniert. "display" macht das nicht. Getestet in FF3.
quelle
Ich mochte keine dieser Antworten als Ganzes wirklich. Wenn Sie eine Klasse haben (z. B. printableArea) und diese als unmittelbares Kind des Körpers haben, können Sie in Ihrem Print-CSS Folgendes tun:
Wenn Sie an einem anderen Ort nach printableArea suchen, müssen Sie sicherstellen, dass die Eltern von printableArea angezeigt werden:
Die Verwendung der Sichtbarkeit kann viele Abstandsprobleme und leere Seiten verursachen. Dies liegt daran, dass die Sichtbarkeit den Elementraum beibehält, ihn nur ausblendet, während die Anzeige ihn entfernt und anderen Elementen ermöglicht, seinen Platz einzunehmen.
Der Grund, warum diese Lösung funktioniert, ist, dass Sie nicht alle Elemente, sondern nur die unmittelbaren Kinder des Körpers erfassen und verstecken. Bei den anderen unten aufgeführten Lösungen mit Anzeige-CSS werden alle Elemente ausgeblendet, was sich auf alle Inhalte von printableArea auswirkt.
Ich würde kein Javascript vorschlagen, da Sie eine Druckschaltfläche benötigen, auf die der Benutzer klickt, und die Standardschaltflächen für den Browserdruck nicht den gleichen Effekt haben würden. Wenn Sie das wirklich tun müssen, würde ich das HTML des Körpers speichern, alle unerwünschten Elemente entfernen, drucken und das HTML wieder hinzufügen. Wie bereits erwähnt, würde ich dies vermeiden, wenn Sie eine CSS-Option wie oben verwenden können.
HINWEIS: Sie können dem Druck-CSS mithilfe von Inline-Stilen beliebiges CSS hinzufügen:
Oder wie ich es normalerweise benutze, ist ein Link-Tag:
quelle
Geben Sie das gewünschte Element an, um die ID zu drucken
printMe
.Fügen Sie dieses Skript in Ihr Head-Tag ein:
Rufen Sie die Funktion auf
quelle
hm ... benutze den Typ eines Stylesheets zum Drucken ... zB:
print.css:
quelle
quelle
Schritt 1: Schreiben Sie das folgende Javascript in Ihr Head-Tag
Schritt 2: Rufen Sie die PrintMe-Funktion ('DivID') durch ein Onclick-Ereignis auf.
quelle
Mit CSS 3 können Sie Folgendes verwenden:
quelle
Ich habe den Inhalt mit JavaScript aufgenommen und ein Fenster erstellt, das ich stattdessen drucken konnte ...
quelle
Sandros Methode funktioniert hervorragend.
Ich habe es so angepasst, dass mehrere printMe-Links zugelassen werden können, insbesondere für Registerkarten und das Erweitern von Text.
function processPrint(printMe){
<- hier eine Variable aufrufenvar printReadyElem = document.getElementById(printMe);
<- Die Anführungszeichen um printMe wurden entfernt, um nach einer Variablen zu fragen<a href="javascript:void(processPrint('divID'));">Print</a>
<- Übergabe der zu druckenden Div-ID an die Funktion zum Umwandeln der printMe-Variablen in die Div-ID. einfache Anführungszeichen sind erforderlichquelle
printDiv (divId) : Eine verallgemeinerte Lösung zum Drucken von Div auf jeder Seite.
Ich hatte ein ähnliches Problem, wollte aber (a) die gesamte Seite drucken können oder (b) einen von mehreren spezifischen Bereichen drucken. Meine Lösung ermöglicht es Ihnen, dank vieler der oben genannten Punkte, jedes zu druckende div-Objekt anzugeben.
Der Schlüssel für diese Lösung besteht darin, dem Druckmedien-Stylesheet eine entsprechende Regel hinzuzufügen, damit das angeforderte div (und sein Inhalt) gedruckt werden.
Erstellen Sie zunächst die erforderliche Druck-CSS, um alles zu unterdrücken (jedoch ohne die spezifische Regel, die das zu druckende Element zulässt).
Beachten Sie, dass ich neue Klassenregeln hinzugefügt habe:
Fügen Sie dann drei JavaScript-Funktionen ein. Das erste schaltet lediglich das Stylesheet für Druckmedien ein und aus.
Der zweite erledigt die eigentliche Arbeit und der dritte räumt danach auf. Das zweite (printDiv) aktiviert das Druckmedien-Stylesheet, fügt dann eine neue Regel hinzu, damit das gewünschte Div gedruckt werden kann, gibt den Druck aus und fügt dann eine Verzögerung vor der endgültigen Verwaltung hinzu (andernfalls können die Stile zurückgesetzt werden, bevor der Druck tatsächlich erfolgt erledigt.)
Die letzten Funktionen löschen die hinzugefügte Regel und setzen den Druckstil erneut auf deaktiviert, damit die gesamte Seite gedruckt werden kann.
Das einzige andere, was Sie tun müssen, ist, Ihrer Onload-Verarbeitung eine Zeile hinzuzufügen, sodass der Druckstil zunächst deaktiviert wird, wodurch das Drucken ganzer Seiten ermöglicht wird.
Dann können Sie von überall in Ihrem Dokument ein Div drucken. Geben Sie einfach printDiv ("thedivid") über eine Schaltfläche oder was auch immer aus.
Ein großes Plus für diesen Ansatz ist die allgemeine Lösung für das Drucken ausgewählter Inhalte innerhalb einer Seite. Es ermöglicht auch die Verwendung vorhandener Stile für Elemente, die gedruckt werden - einschließlich des enthaltenen div.
HINWEIS: In meiner Implementierung muss dies das erste Stylesheet sein. Ändern Sie die Blattreferenzen (0) in die entsprechende Blattnummer, wenn Sie sie später in der Blattfolge vornehmen müssen.
quelle
@ Kevin Florida Wenn Sie mehrere Divs mit derselben Klasse haben, können Sie es folgendermaßen verwenden:
Ich habe den inneren Inhaltstyp von Colorbox verwendet
quelle
In meinem Fall musste ich ein Bild innerhalb einer Seite drucken. Als ich die Lösung verwendet habe, hatte ich 1 leere Seite und die andere, die das Bild zeigt. Hoffe es wird jemandem helfen.
Hier ist das CSS, das ich verwendet habe:
Mein HTML ist:
quelle
Beste CSS für Platz leere Höhe:
quelle
Der beste Weg, um bestimmte Div oder ein Element zu drucken
quelle
Verwenden Sie zum Drucken ein spezielles Stylesheet
und fügen Sie dann jedem Tag, dessen Inhalt Sie nicht drucken möchten, eine Klasse hinzu, dh "noprint".
In der CSS verwenden
quelle
Wenn Sie nur dieses Div drucken möchten, müssen Sie die folgenden Anweisungen verwenden:
quelle
Die Funktion printDiv () wurde einige Male ausgeführt. In diesem Fall verlieren Sie jedoch alle Bindungselemente und Eingabewerte. Meine Lösung besteht also darin, ein Div für alles zu erstellen, das "body_allin" heißt, und ein anderes außerhalb des ersten, das "body_print" heißt.
Dann rufen Sie diese Funktion auf:
quelle
Sie können einen separaten CSS-Stil verwenden, der alle anderen Inhalte außer dem mit der ID "printarea" deaktiviert.
Weitere Erläuterungen und Beispiele finden Sie unter CSS-Design: Zum Drucken .
quelle
Ich hatte mehrere Bilder mit jeweils einer Schaltfläche und musste auf eine Schaltfläche klicken, um jedes Div mit einem Bild zu drucken. Diese Lösung funktioniert, wenn ich den Cache in meinem Browser deaktiviert habe und sich die Bildgröße in Chrome nicht ändert:
quelle
Noch ein Ansatz, ohne die aktuelle Seite zu beeinflussen, und der CSS bleibt auch beim Drucken erhalten. Hier muss der Selektor ein spezifischer Div-Selektor sein, welchen Inhalt wir drucken müssen.
Hier wird eine Auszeit gegeben, um zu zeigen, dass externes CSS darauf angewendet wird.
quelle
Ich habe viele der angebotenen Lösungen ausprobiert. Keine davon hat perfekt funktioniert. Sie verlieren entweder CSS- oder JavaScript-Bindungen. Ich habe eine perfekte und einfache Lösung gefunden, bei der weder CSS- noch JavaScript-Bindungen verloren gehen.
HTML:
Javascript:
quelle
Ich bin sehr spät zu dieser Party, aber ich würde gerne noch einen anderen Ansatz verfolgen. Ich habe ein kleines JavaScript-Modul namens PrintElements geschrieben, um Teile einer Webseite dynamisch zu drucken.
Es durchläuft ausgewählte Knotenelemente und durchläuft für jeden Knoten den DOM-Baum bis zum BODY-Element. Auf jeder Ebene, einschließlich der ersten Ebene (bei der es sich um die Ebene des zu druckenden Knotens handelt), wird
pe-preserve-print
dem aktuellen Knoten eine Markierungsklasse ( ) hinzugefügt. Hängt dann eine weitere Markierungsklasse (pe-no-print
) an alle Geschwister des aktuellen Knotens an, jedoch nur, wenn keinepe-preserve-print
Klasse vorhanden ist . Als dritter Akt wird auch eine andere Klasse an erhaltene Ahnenelemente angehängtpe-preserve-ancestor
.Eine absolut einfache zusätzliche Nur-Druck-CSS blendet die entsprechenden Elemente aus und zeigt sie an. Einige Vorteile dieses Ansatzes sind, dass alle Stile beibehalten werden, kein neues Fenster geöffnet wird, nicht viele DOM-Elemente verschoben werden müssen und im Allgemeinen nicht invasiv für Ihr Originaldokument sind.
Weitere Informationen finden Sie in der Demo oder im entsprechenden Artikel .
quelle
Sie können dies verwenden: http://vikku.info/codesnippets/javascript/print-div-content-print-only-the-content-of-an-html-element-and-not-the-whole-document/
Oder verwenden Sie
visibility:visible
undvisibility:hidden
CSS-Eigenschaft zusammen mit@media print{}
'display: none' blendet alle verschachtelten 'display: block' aus. Das ist keine Lösung.
quelle
Ich habe die Lösung gefunden.
quelle
Basierend auf der Antwort von @Kevin Florida habe ich einen Weg gefunden, um das Deaktivieren von Skripten auf der aktuellen Seite aufgrund des Überschreibens von Inhalten zu vermeiden. Ich verwende eine andere Datei namens "printScreen.php" (oder .html). Wickeln Sie alles, was Sie drucken möchten, in eine div "printSource" ein. Öffnen Sie mit Javascript ein neues Fenster, das Sie zuvor erstellt haben ("printScreen.php"), und greifen Sie dann auf den Inhalt in "printSource" des oberen Fensters zu.
Hier ist der Code.
Hauptfenster :
Dies ist "printScreen.php" - eine andere Datei, um Inhalte zum Drucken abzurufen
quelle