richard: Tabellenkopf auf jeder Druckseite anzeigen

Hallo Leute!
Ich habe eine lange Tabelle, die auf mehrere Seiten ausgedruckt werden soll. Dabei will ich den Tabellenheader auf jeder Druckseite haben.
Ich habe leider wenig Ahnung von CSS und die bei der Recherche gefundene Lösung (alles was unten im Style Tag steht) funktioniert so nicht. Was mach ich falsch?

Seitenaufbau:

<html>
<head>
<style type="text/css">
@media print
{
  THEAD {display: table-header-group}
}
</style
</head>
<body>
 <table>
  <tr> <td> bla </td> </tr>
  <tr> <td> LANGE TABELLE </td> </tr>
 </table>
</body>

Aufbau lange Tabelle:
<table>
  <thead>
     <tr><th>Ueberschrift</th></tr>
  </thead>
  <tbody>
     ...viele Rows Einträge...
  </tbody>
</table>

Ich dank euch herzlich,
Richard

  1. Hallo,

    THEAD {display: table-header-group}

    Vermutlich "kann" es einfach noch kein Browser...

    In der CSS 2 Specification
    http://www.w3.org/TR/REC-CSS2/tables.html#q2
    bzw. in den Errata dazu
    http://www.w3.org/Style/css2-updates/REC-CSS2-19980512-errata.html#x24
    steht (korrigiert) zu table-header-group folgendes:

    "Print user agents may repeat header rows on
    each page spanned by a table."

    Es heisst also: "may", d.h. die Browser koennen/duerfen
    die Kopfzeile auf jeder Seite wiederholen, muessen aber nicht.

    Wie das "may" zu verstehen ist, steht hier:
    http://www.w3.org/TR/REC-CSS2/conform.html#x8
    naemlich gemaess RFC 2119:
    http://www.faqs.org/rfcs/rfc2119.html
    oder http://www.ietf.org/rfc/rfc2119.txt

    Gruesse,

    Thomas

    1. Hallo Thomas!
      Also, dann geh ich mal davon aus, dass dieses MAY von meinem Browser (IE 6 - Anwendung nur für Intranet) nicht verstanden wird.
      Gibt es dann ein Workaround?
      Oder eine bessere Lösung?

      Danke,
      Richard

      1. Hallo,

        Gibt es dann ein Workaround?
        Oder eine bessere Lösung?

        Du koenntest eine extra Druckversion anbieten.

        Ob sich das lohnt, kommt halt darauf an, wie oft die Benutzer
        das Dokument voraussichtlich drucken werden, und wie oft
        sie es nur am Bildschirm anschauen.

        Wie gross der Aufwand ist, haengt davon ab,
        wie oft die Inhalte aendern und wie Du
        die Dokumente ueberhaupt erstellst (von Hand
        oder mit einem CMS).

        HTML-Druckversion: Mach halt mehrere Tabellen und
        gib jeder wieder den vollen Kopf.
        Den Seitenumbruch vor jeder Tabelle mit
        table { page-break-before:always; }
        sollte der MS IE 6.0 offenbar verstehen.
        (Gemaess der Tabelle http://css.talky.de/media.php)

        PDF-Druckversion: Oeffne die Seite in Deiner Textverarbeitung,
        die den Begriff "DIN-A4-Seite" besser kennt als die meisten Browser,
        passe die Tabelle an und "drucke" die Seite in eine PDF-Datei.

        Gruesse,

        Thomas

        1. Hallo Thomas!
          Wie werden Tabellen erzeugt?
          Es handelt sich um Darstellung von Prüfprotokollen, die in XML vorliegen.
          Da diese XML Dateien sehr komplex sind, und die Knotenstruktur nicht direkt der Tabellenstruktur entspricht, ist es nötig, das Ganze zunächst als XML Isle mittels XSL in eine HTML Seite zu kopieren, diese Isle in ein DOM Objekt zu laden und dieses mit Javascript "aufzuarbeiten".
          Dann entsteht dynamisch die bereits erklärte Tabellenstruktur.

          Wir die Druckfunktion oft benötigt?
          Diese muss immer druckbar sein, da die Ergebnisse unter Umständen konserviert werden müssen.

          @media print
          {
            THEAD {display: table-header-group}
          }
          sollte im IE6 funktionieren!

          Tut es aber nicht, denn eben diese Struktur habe ich eingebunden und sie funktioniert nicht.
          Gibt es denn eine Möglichkeit mittels CSS irgendwie abzufragen, wieviel px oder cm der drucker auf einer Seite darstellen kann und dann danach eigene "Einzelseiten" mit direktem page-break-after zu generieren?

          Weiterhin bin ich für alle Hinweise dankbar,
          Richard

          1. Hallo,

            @media print
            { THEAD {display: table-header-group} }
            sollte im IE6 funktionieren!
            Tut es aber nicht, denn eben diese Struktur habe ich eingebunden und sie funktioniert nicht.

            Wie erwaehnt steht in der CSS 2 Spec. nur als Vorschlag,
            dass Browser wegen dieser CSS-Anweisung den Tabellenkopf
            auf jeder Seite ausdrucken koennen.
            Es gibt kein vorgeschriebenes Verhalten, und somit auch
            kein "funktionieren" oder "nicht funktionieren".
            Ein Browser kann also table-header-group "koennen" (kennen)
            und es trotzdem nicht so ausdrucken, wie Du es gerne haettest.

            Gibt es denn eine Möglichkeit mittels CSS irgendwie abzufragen, wieviel px oder cm der drucker auf einer Seite darstellen kann und dann danach eigene "Einzelseiten" mit direktem page-break-after zu generieren?

            CSS ist keine Programmiersprache und kann nichts "abfragen"
            oder "ausrechnen".
            Wenn schon waere sowas hoechstens mit JavaScript moeglich.
            Ich bezweifle aber, dass diese Dimensionen abfragbar sind.

            Ich wuerde stattdessen einfach fixe Seitenumbrueche einbauen,
            und zwar so, dass es "auf jeden Fall Platz hat".
            Das heisst, als zur Verfuegung stehenden Raum wuerde ich
            ein DIN-A4-Blatt (21.0 x 29.7 cm) abzueglich 2.5 cm auf
            jeder Seite voraussetzen, also eine bedruckbare Flaeche
            von 16 x 24.7 cm.

            Jakob Nielsens Meinung zum Thema:
            http://www.useit.com/alertbox/9608.html

            Du hast also dann mehrere Tabellen.
            Fuer die Bildschirmansicht kannst Du diese ja wie bisher
            als eine grosse Tabelle anzeigen lassen, indem Du
            margin-top und margin-bottom der Tabellen auf Null setzt.

            Dass die Spaltenueberschriften auch mitten in der Tabelle
            regelmaessig wiederholt werden, kann sogar noch zur Benutzerfreundlichkeit und Lesbarkeit beitragen.
            Wenn es Dich aber stoert, kannst Du ja den THEAD bei allen
            Tabellen ausser der ersten im Screen-CSS ausblenden.

            Wenn Du so richtig rumbasteln willst, machst Du natuerlich
            aus Deinen XML-Daten on-the-fly PDF-Dateien :-)

            Gruesse,

            Thomas

            1. Hallo Thomas!
              Danke für die Hinweise bzgl. CSS. (Wie gesagt, da kenn ich mich nicht aus.)
              Dann muss ich mal schauen, was mit JS geht ;)

              »»Wenn Du so richtig rumbasteln willst, machst Du natuerlich
              »»aus Deinen XML-Daten on-the-fly PDF-Dateien :-)
              FOP?! Gott bewahre...
              Aber schoen, dass Du Humor hast.

              Richard