421 Stimmen

Drucken des Inhalts eines DIVs

Wie lässt sich der Inhalt eines DIV am besten ausdrucken?

21voto

huston007 Punkte 1944

Von hier aus https://forums.asp.net/t/1261525.aspx

<html> 
<head>
    <script language="javascript">
        function printdiv(printpage) {
            var headstr = "<html><head><title></title></head><body>";
            var footstr = "</body>";
            var newstr = document.all.item(printpage).innerHTML;
            var oldstr = document.body.innerHTML;
            document.body.innerHTML = headstr + newstr + footstr;
            window.print();
            document.body.innerHTML = oldstr;
            return false;
        }
    </script>

    <title>div print</title>

</head>

<body>
    //HTML Page //Other content you wouldn't like to print
    <input name="b_print" type="button" class="ipt" onClick="printdiv('div_print');" value=" Print ">

    <div id="div_print">
        <h1 style="Color:Red">The Div content which you want to print</h1>
    </div>
    //Other content you wouldn't like to print //Other content you wouldn't like to print
</body>    
</html>

20voto

Techie Punkte 43452
function printdiv(printdivname) {
    var headstr = "<html><head><title>Booking Details</title></head><body>";
    var footstr = "</body>";
    var newstr = document.getElementById(printdivname).innerHTML;
    var oldstr = document.body.innerHTML;
    document.body.innerHTML = headstr+newstr+footstr;
    window.print();
    document.body.innerHTML = oldstr;
    return false;
}

Dies druckt die div und stellen Sie den Inhalt wieder so ein, wie er vorher war. printdivname es el div gedruckt werden.

13voto

Carl Russmann Punkte 1709

Erstellen Sie ein separates Druck-Stylesheet, das alle anderen Elemente außer dem zu druckenden Inhalt ausblendet. Markieren Sie es mit 'media="print" wenn Sie es laden:

<link rel="stylesheet" type="text/css" media="print" href="print.css" />

So können Sie für Ausdrucke ein völlig anderes Stylesheet laden.

Wenn Sie erzwingen möchten, dass der Druckdialog des Browsers für die Seite angezeigt wird, können Sie dies beim Laden mit JQuery so tun:

$(function() { window.print(); });

oder durch ein beliebiges anderes Ereignis ausgelöst werden, z. B. wenn ein Benutzer auf eine Schaltfläche klickt.

13voto

dors Punkte 1042

Meines Erachtens haben die bisher vorgeschlagenen Lösungen folgende Nachteile:

  1. Die CSS-Media-Query-Lösungen gehen davon aus, dass es nur ein div zu drucken gibt.
  2. Die Javascript-Lösungen funktionieren nur auf bestimmten Browsern.
  3. Wenn Sie den Inhalt des übergeordneten Fensters zerstören und neu erstellen, entsteht ein Chaos.

Ich habe die obigen Lösungen verbessert. Hier ist etwas, das ich getestet habe und das mit den folgenden Vorteilen wirklich gut funktioniert.

  1. Funktioniert in allen Browsern, einschließlich IE, Chrome, Safari und Firefox.
  2. Das übergeordnete Fenster wird nicht zerstört und neu geladen.
  3. Kann eine beliebige Anzahl von DIV's auf einer Seite drucken.
  4. Verwendet HTML-Schablonen, um eine fehleranfällige String-Verkettung zu vermeiden.

Wichtige Punkte:

  1. Sie müssen ein onload="window.print()" für das neu erstellte Fenster haben.
  2. Rufen Sie nicht targetwindow.close() oder targetwindow.print() von der übergeordneten Anwendung aus auf.
  3. Stellen Sie sicher, dass Sie targetwindow.document.close() und target.focus() ausführen.
  4. Ich benutze Jquery, aber Sie können die gleiche Technik mit einfachen Javascript als gut tun.
  5. Sie können dies hier in Aktion sehen https://math.tools/table/multiplication . Sie können jede Tabelle einzeln ausdrucken, indem Sie auf die Schaltfläche "Drucken" in der Kopfzeile der Box klicken.

    <script id="print-header" type="text/x-jquery-tmpl"> <html> <header> <title>Printing Para {num}</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> <style> body { max-width: 300px; } </style> </header> <body onload="window.print()"> <h2>Printing Para {num} </h2> <h4>https://math.tools</h4> </script> <script id="print-footer" type="text/x-jquery-tmpl"> </body> </html> </script> <script> $('.printthis').click(function() { num = $(this).attr("data-id"); w = window.open(); w.document.write( $("#print-header").html().replace("{num}",num) + $("#para-" + num).html() + $("#print-footer").html() ); w.document.close(); w.focus(); //w.print(); Don't do this otherwise chrome won't work. Look at the onload on the body of the newly created window. ///w.close(); Don't do this otherwise chrome won't work }); </script>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    <a class="btn printthis" data-id="1" href="#" title="Print Para 1"><i class="fa fa-print"></i> Print Para 1</a> <a class="btn printthis" data-id="2" href="#" title="Print Para 2"><i class="fa fa-print"></i> Print Para 2</a>

    <p class="para" id="para-1"> Para 1 : Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

    <p class="para" id="para-2"> Para 2 : Lorem 2 ipsum 2 dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

12voto

Jason Punkte 7384

Ich habe ein Plugin für dieses Szenario entwickelt. Ich war mit den vorhandenen Plugins unzufrieden und wollte etwas Umfangreicheres/Konfigurierbares entwickeln.

https://github.com/jasonday/printThis

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X