Ich habe ein Projekt, bei dem eine HTML-Tabelle mit vielen Zeilen gedruckt werden muss.
Mein Problem ist die Art und Weise, wie die Tabelle über mehrere Seiten gedruckt wird. Manchmal wird eine Reihe in zwei Hälften geschnitten, sodass sie nicht mehr lesbar ist, da sich eine Hälfte am blutenden Rand einer Seite befindet und der Rest oben auf der nächsten Seite gedruckt wird.
Die einzige plausible Lösung, die ich mir vorstellen kann, ist die Verwendung gestapelter DIVs anstelle einer Tabelle und das Erzwingen von Seitenumbrüchen, falls erforderlich. Bevor ich jedoch die gesamte Änderung durchlief, dachte ich, ich könnte hier vorher nachfragen.
html
css
printing
html-table
h3.
quelle
quelle
<thead>
, Ihrer Tabelle eine mit dem folgenden CSS hinzuzufügenthead {display: table-header-group; }
, um den Tabellenkopf auf allen nachfolgenden Seiten zu drucken (nützlich für lange Datentabellen).Antworten:
quelle
Hinweis: Wenn Sie das Seitenumbruch-Nach verwenden: Immer für das Tag wird nach dem letzten Bit der Tabelle ein Seitenumbruch erstellt, wobei jedes Mal am Ende eine vollständig leere Seite erstellt wird! Um dies zu beheben, ändern Sie es einfach in Seitenumbruch nach: auto. Es wird korrekt unterbrochen und es wird keine zusätzliche leere Seite erstellt.
quelle
Erweiterung von Sinan Ünür Lösung:
Es scheint, dass
page-break-inside:avoid
in einigen Browsern nur Blockelemente berücksichtigt werden, nicht Zellen, Tabellen, Zeilen und Inline-Blöcke.Wenn Sie versuchen,
display:block
dasTR
Tag zu verwenden und es dort zu verwendenpage-break-inside:avoid
, funktioniert es, aber es spielt mit Ihrem Tabellenlayout herum.quelle
$(document).ready(function(){$("table tbody th, table tbody td").wrapInner("<div></div>");});
tr { display: block; }
Nur Drucken zu setzen, anstatt alle externen<div>
Elemente hinzuzufügen . (Nicht getestet, aber einen Blick wert)Keine der Antworten hier hat bei mir in Chrome funktioniert. AAverin auf GitHub hat zu diesem Zweck einige nützliche Javascript erstellt das für mich funktioniert hat:
Fügen Sie einfach das js zu Ihrem Code hinzu und fügen Sie der Klasse die Klasse 'splitForPrint' hinzu. Dadurch wird die Tabelle ordentlich in mehrere Seiten aufgeteilt und jeder Seite wird der Tabellenkopf hinzugefügt.
quelle
splitForPrint
aber in der JS wurde nirgends die Referenz des Elements mit dem className verwendetsplitForPrint
. Nur der Teil wovar splitClassName = 'splitForPrint';
aber das war's.Verwenden Sie diese CSS-Eigenschaften:
Zum Beispiel:
über
quelle
Ich habe dieses Problem kürzlich mit einer guten Lösung gelöst.
CSS :
JS :
Klappt wunderbar!
quelle
Am Ende folgte ich dem Ansatz von @ vicenteherrera mit einigen Verbesserungen (die möglicherweise Bootstrap 3-spezifisch sind).
Grundsätzlich; Wir können
tr
s odertd
s nicht brechen , weil sie keine Elemente auf Blockebene sind. Also binden wirdiv
s in jedes ein und wenden unserepage-break-*
Regeln gegen das andiv
. Zweitens; Wir fügen oben an jedem dieser Divs eine Polsterung hinzu, um eventuelle Styling-Artefakte auszugleichen.Die Rand- und Polsteranpassungen waren notwendig, um eine Art von Jitter auszugleichen, der eingeführt wurde (meiner Vermutung nach - vom Bootstrap). Ich bin mir nicht sicher, ob ich eine neue Lösung aus den anderen Antworten auf diese Frage vorstelle, aber ich denke, dass dies vielleicht jemandem helfen wird.
quelle
Ich hatte das gleiche Problem und suchte überall nach einer Lösung. Endlich habe ich etwas gefunden, das für jeden Browser für mich funktioniert.
Verwenden Sie dieses CSS oder Anstelle von CSS können Sie dieses Javascript verwenden
Hoffe, dass dies auch für Sie funktioniert.
quelle
Ich habe viele Lösungen überprüft und niemand hat gut funktioniert.
Also habe ich einen kleinen Trick ausprobiert und es funktioniert:
Fuß mit Stil: Wird
position: fixed; bottom: 0px;
am Ende der letzten Seite platziert, aber wenn die Fußzeile zu hoch ist, wird sie vom Inhalt der Tabelle überlappt.tfoot with only:
display: table-footer-group;
Überlappt sich nicht, befindet sich aber nicht am Ende der letzten Seite ...Lassen Sie uns zwei Fuß setzen:
Einer reserviert Platz auf nicht letzten Seiten, der zweite setzt in Ihre aktuelle Fußzeile.
quelle
Ich habe alle oben genannten Vorschläge ausprobiert und eine einfache und funktionierende Cross-Browser-Lösung für dieses Problem gefunden. Für diese Lösung sind keine Stile oder Seitenumbrüche erforderlich. Für die Lösung sollte das Format der Tabelle wie folgt lauten:
Das oben genannte Format wurde getestet und funktioniert in Cross-Browsern
quelle
Nun Leute ... Die meisten Lösungen hier oben haben nicht funktioniert. So funktionierten die Dinge für mich.
HTML
Der erste Satz Kopf wird als Dummy-Satz verwendet, damit beim Seitenumbruch im zweiten Kopf (dh im Originalkopf) kein oberer Rand fehlt.
quelle
Die akzeptierte Antwort funktionierte nicht in allen Browsern für mich, aber das folgende CSS funktionierte für mich:
Die HTML-Struktur war:
In meinem Fall gab es einige zusätzliche Probleme mit dem
thead tr
, aber dies löste das ursprüngliche Problem, dass die Tabellenzeilen nicht beschädigt wurden.Aufgrund der Header-Probleme kam ich letztendlich zu:
Dies verhinderte nicht, dass Zeilen unterbrochen wurden. nur der Inhalt jeder Zelle.
quelle