2009-12-30 6 views
6

Ich habe einen HTML-basierten Bericht erstellt, der variable Längen und Anzahl der Segmente in C# (weshalb Crystal Reports wurde nicht verwendet) und ich kann nicht die wunderbare verwenden als der Bericht ist Intranet basiert (boooo, zischen).HTML-basierte Bericht wird durch Paginierung in Stücke gerissen

Ich habe eine media = print CSS-Datei erstellt, die verwendet wird, um die Formatierung so effizient wie möglich zu machen, aber ich habe ein Problem. Es gibt eine sehr lange Tabelle im Bericht mit ungefähr 50 Tabellenzeilen, jede um die Höhe: 200px. Leider werden einige der Tabellenzeilen aufgrund des automatischen Seitenumbrüchens unterbrochen, wobei ein Teil der Tabellenzeile auf einer Seite und der Rest auf der nächsten Seite liegt. Gibt es trotzdem (hoffentlich über CSS), um die Auslagerungsoptionen so einzustellen, dass Tabellenelemente (oder ähnliche Elemente) nicht getrennt werden?

Danke, Alex

+0

Ich wünschte, CSS behandelt Drucktabellen besser, aber es scheint nicht gut mit den CSS-Seitenumbruch Optionen zu verhalten. Ich würde auch gerne eine Lösung für dieses Problem sehen. –

+0

Entschuldigung für die verspätete Antwort auf die Antworten, waren auf einen kurzen Urlaub. Nach einiger sorgfältiger Überlegung habe ich beschlossen, Brian die Antwort zu geben, da er durch seine Tests einige interessante Ergebnisse gefunden hat und eine Lösung mit Prince vorgeschlagen hat. Ich habe auch Markjgrants Antwort markiert, da es sich um eine mögliche Lösung durch einen Hack handelte, an den ich nicht gedacht hatte. – Alex

Antwort

1

Die page-break-inside: avoid Eigenschaft sollte diese kontrollieren, aber es sieht aus wie die meisten Browser nicht unterstützen, auf tr oder td Elemente. In meinen Tests, ist Opera die einzigen, die diese Eigenschaft zeichnet, wie im folgenden Test verwendet:

<!DOCTYPE html> 
<title>Page Break Test</title> 
<style>tr, td { page-break-inside: avoid }</style> 
<table border=1> 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
    <tr height=200><td>This is a test. This should be tall.<td>Another column. 
</table> 

Wenn Sie Opera verwenden können, könnte dies gut genug sein. Eine andere Option wäre, in Prince zu schauen, um Ihre Berichte zu drucken, da es tendenziell viel bessere Unterstützung für Druck-Stylesheet-Funktionen als die Browser hat (obwohl ich diese Funktion nicht speziell getestet habe).

1

Wenn Ihre Zeilenhöhe fest ist, können Sie herausfinden, wie viele Zeilen auf einer Seite passen, und dann page-break-after: always für jede n-te Zeile verwenden, um Seitenumbrüche an den entsprechenden Stellen zu erzwingen. Es ist ein bisschen ein Hack, aber es könnte die beste Option sein.

+1

Aber er wird nie sicher wissen, wie viele passen, weil verschiedene Browser anders drucken, Benutzer können Schriftgröße erhöhen/verringern, und Benutzer können Druckränder und Seitengröße ändern. –

+0

media = print CSS kann diese Faktoren minimieren, aber nicht vollständig eliminieren. – keithjgrant

1

Leider ist es unmöglich, zuverlässig zu erreichen, was Sie mit HTML wollen.

Wenn Sie eine hohe Kontrolle darüber haben wollen, was gedruckt wird, schlage ich vor, dass Sie Ihren Report Generator PDF oder XPS anstelle von HTML ausgeben (oder wie Brian Campbell empfohlen), indem Sie ein Tool wie Prince verwenden, das HTML und konvertiere es in PDF).

Verwandte Themen