Mit Hilfe von CSS und/oder jQuery für Gedruckte Seiten mit Seitenumbrüchen
Ich habe eine dynamisch generierte html-Seite, die entwickelt, um gedruckt werden.
Möchte ich, um Seitenumbrüche zu erstellen, basierend auf div-Bereichen - in dem angegebenen div - wenn es NICHT vollständig auf die Seite passen, legen Sie eine Seite brechen, bevor es.
In der Theorie, überall von einem einzigen div, bis zu vielleicht 10, vielleicht passen auf eine einzige Seite gedruckt, so denke ich werde ich brauchen, um jQuery verwenden, um an die Einschübe, nachdem die Seite geladen ist.
Wenn dies eine desktop-Anwendung, ich würde den Ansatz so etwas wie dieses:
- Messen Sie die Seitenbreite und-Höhe (mit printer-Objekt von irgendeiner Art).
- Messen die einzelnen div-Höhe - und subtrahieren Sie diese von der Seite total Verbleibende Höhe
- wenn ( remaining_space - div_height > 0 ) { //setzen auf der Seite } else { //einfügen Seite erstmal Pause }
Gibt es eine Möglichkeit mit jQuery, CSS -, raw -, JavaScript -, oder irgendetwas anderes, das würde mich zu diesem Szenario?
- Diese Frage wurde gestellt und beantwortet, die bereits in verschiedenen Formen mehrmals. Hier ein Beispiel: stackoverflow.com/questions/4760899/...
- ja - überprüft, dass man Sie schon aus, nicht wirklich die Beantwortung meiner Frage, obwohl, aber es ist ein Schritt. Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, ich verbrachte den letzten Tag oder so Bezifferung dieses heraus, so dass ich posten wollte meine Lösung zu diesem Fall, jemand brauchte die Antwort.
Im Allgemeinen hier ist, was ich Tat.
-> aufgerufene Funktion fügt die erste Seite von DOM - so etwas wie dieses
-> Messen Sie die Höhe des div, dass ist die Seite (in meinem Fall $('.Seite').height(); )
-> lief einer Funktion zu tun, die Insertionen der divs und den neuen Seiten - so etwas wie dieses
Beachten Sie, dass jede Seite, die div (in meinem Fall, class='page') im Drucker-stylesheet hat diese:
page-break-after: always;
Dies ist, wie ich es geschafft habe eine neue Seite erstellt, auf den Drucker, wo ich wollte.
Nach dem ausführen von jQuery-Funktion oben, versteckte ich die original-Abschnitt enthalten ist, wird die div-Elemente, die ich wollte, um in die gedruckten Seiten. Note, die ich nicht verbergen konnte diesem Abschnitt, bevor die hand, weil mein jQuery-Messungen würde nicht gültige Ergebnisse erzeugen (in meinem Fall platzierte ich alle divs ein div-wrapper mit der id " hide_me', und stellen Sie den Stil auf height:1px; overflow:auto; ).
Ich weiß, das ist sehr 50,000 ft Sicht, aber hoffentlich ist es hilfreich für Sie.
Können Sie immer legen Sie eine leere DIV-tag mit der CSS-Attribut {pageBreakBefore: 'always'} oder {pageBreakAfter: 'always'} auf Punkte in Ihrem HTML, wo Sie errechnet haben, in jQuery der Seite, Grenzen zu, indem Sie die Höhe der DIVs oder was auch immer. Aber würden Sie brauchen, um eine ziemlich intime Kenntnis von den Inhalten der Seite, und wahrscheinlich geben Sie Ihre schriftart, Größen etc. als "pt" anstatt "px".
Sehen, eine ähnliche Anfrage, hier jedoch:
Nicht genau, was Sie suchen, aber haben Sie einen Blick auf diese
http://www.javascriptkit.com/dhtmltutors/pagebreak.shtml
Mit einem zusätzlichen Hauch von JS, kann möglich sein, was, die Sie wollen, um zu versuchen zu erreichen.
Könnten Sie versuchen, mit diesem plugin zum drucken der Elemente einer Seite. http://www.recoding.it/wp-content/uploads/demos/jqprint-demo.htm
Dies könnte hilfreich sein, wenn Sie der gleichen Logik Folgen, die Sie vorgeschlagen, für eine desktop-Anwendung. Sie können wickeln Sie Ihre "Seiten" in divs und das ist, was Sie sagen würde, jqPrint zu drucken. Die Seitenumbrüche werden könnte, ein weiteres element oder auch ein div-Element, aber mit einer Klasse, um Sie wissen zu lassen es ist der Seitenumbruch. Zum Beispiel:
etc..
dann
Ich weiß nicht, ob Sie vertraut mit jQuery. Wenn Sie nicht lassen Sie es uns wissen.
Den point-of-print-Paginierung, meiner Meinung nach, ist es nicht aufteilen, Dinge schlecht. Und in der Regel, was Sie wollen nicht zu Spalten schlecht ist meistens, tabellarische Daten. Das ist also ein Ansatz geht davon aus, dass Sie sich geändert haben die
<div>
's in die Tabelle formatieren und gruppiert die Zeilen sollten nicht aufgeteilt werden in<tbody>
Gruppierungen.Wir möchten, markieren Kopf-und Fußzeilen für den code zu finden, und wir nicht unbedingt wollen, dass Sie erscheinen dort, wo Sie sind beschrieben
Diese ruft sich selbst auf die Seite laden, sondern könnte stattdessen rechts aufgerufen werden, bevor Sie drucken.
Legen wir die Tabelle mit Seitenzahlen, wie dies.
Scannen wir über die
<tbody>
's und Zeug, eine Fußzeile und eine Kopfzeile vor jedem element, das dazu bestimmt ist, zu brechen, über das Ende einer Seite.Wir markieren Kopf-und Fußzeilen mit css-Klassen und verfolgen, die Möglichkeit der änderung von Kopf-und Fußzeilen, indem Sie Sie an den Standorten in der Zeile fließen, wo Sie brauchen, um zu ändern, aber halten Sie unsichtbar mit einer anderen css-Klasse.
Ärgerlicherweise einige Implementierungen von Seite zu brechen, gelten nur für streng "block" - Elemente, also ist es nicht definiert tbody. Also ich habe das auf einem
<p>
tag-Klasse angehängt, auf jeder Seite der Tabelle.