Repite los encabezados de las tablas en el modo de impresión


101

¿Es posible en CSS usar una propiedad dentro de una @page para decir que los encabezados de tabla (th) deben repetirse en cada página si la tabla se extiende por varias páginas?

Respuestas:


109

Para eso sirve el elemento THEAD . Documentos oficiales aquí .


1
No he pensado en eso, pero no parece funcionar en la práctica.
— avernet

1
Lo he usado con éxito en Firefox.
— jishi

5
Como de costumbre, requiere un navegador que no esté dañado; consulte el comentario de jishi.
— Peter Rowell

9
Estos comentarios son bastante antiguos. A partir del 13/03/13, la verificación puntual perezosa muestra que funciona en el último IE10, e incluso en el venerable IE8 ...
— Nathan

8
Chrome finalmente admite encabezados de tabla repetidos para medios impresos. Esto está habilitado si el th tiene break-inside:avoidy se puede deshabilitar con break:inside: auto. Ver codereview.chromium.org/2021703002/#ps20001
— Alex Osborn

69

Algunos navegadores repiten el theadelemento en cada página, como se supone que deben hacerlo. Otros necesitan ayuda: agregue esto a su CSS:

thead {display: table-header-group;}
tfoot {display: table-header-group;}

Opera 7.5 e IE 5 no repetirán los encabezados sin importar lo que intentes.

( fuente )


Tampoco Flying Saucer, que estoy usando para generar un PDF. También haré esta pregunta en la lista de correo de Flying Saucer para ver si hay otra forma de hacerlo.
— avernet

7
Las últimas versiones de Chrome y Safari tampoco hacen esto actualmente. Consulte mi respuesta para obtener enlaces a sus rastreadores de problemas.
— Nick Knowlson

1
madre de dios, en el momento en que esto fue escrito IE5 todavía era algo?
— igorsantos07

Acabo de probar el theadejemplo en mi CSS (compatible con IE7) y repite los títulos cuando hago una vista previa de impresión. Gracias. Pero veo que aparece una fila replicada en la parte superior de la página siguiente. ¿Por qué?
— Andrew Truckle

45

Antes de implementar esta solución, es importante saber que Webkit actualmente no hace esto.

Aquí está el problema relevante en el rastreador de problemas de Chrome: http://code.google.com/p/chromium/issues/detail?id=24826

Y en el rastreador de problemas de Webkit: https://bugs.webkit.org/show_bug.cgi?id=17205

Destaca en el rastreador de problemas de Chrome si quieres demostrar que es importante para ti (yo lo hice).


1
Gracias por esto, me habría causado un gran dolor de cabeza si no me hubiera desplazado hacia abajo.
— Seiyria

4
Y casi 4 años después (y 8 años desde que se presentó el problema de WebKit), ¡este sigue siendo el caso!
— jcaron

41

Flying Saucer xhtmlrenderer repite THEAD en cada página de salida PDF, si agrega lo siguiente a su CSS:

        table {
            -fs-table-paginate: paginate;
        }

(Funciona al menos desde el lanzamiento de R8).


4
Esto es justo lo que estaba buscando. ¡Gracias!
— Alex

¡Increíble! (el enlace está muerto: /)
— Cyril N.

¡Increíble! ¡Gracias!
— Frison Alexander

6

Los navegadores Chrome y Opera no son compatibles, thead {display: table-header-group;}pero el resto de los demás lo admiten correctamente.


¿Cómo lograr esto en Chrome?
— Puntero nulo

4

¿Cómo imprimo una tabla HTML? Encabezado y pie de página en cada página

También funciona en navegadores Webkit

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function PrintPage() {
            document.getElementById('print').style.display = 'none';
            window.resizeTo(960, 600);
            document.URL = "";
            window.location.href = "";
            window.print();
        }

    </script>
    <style type="text/css" media="print">
        @page
        {
            size: auto; /* auto is the initial value */
            margin: 2mm 4mm 0mm 0mm; /* this affects the margin in the printer settings */
        }
        thead
        {
            display: table-header-group;
        }
        tfoot
        {
            display: table-footer-group;
        }
    </style>
    <style type="text/css" media="screen">
        thead
        {
            display: block;
        }
        tfoot
        {
            display: block;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table style="width: 500px; margin: 0 auto;">
            <thead>
                <tr>
                    <td>
                        header comes here for each page
                    </td>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        1
                    </td>
                </tr>
                <tr>
                    <td>
                        2
                    </td>
                </tr>
                <tr>
                    <td>
                        3
                    </td>
                </tr>
                <tr>
                    <td>
                        4
                    </td>
                </tr>
                <tr>
                    <td>
                        5
                    </td>
                </tr>
                <tr>
                    <td>
                        6
                    </td>
                </tr>
                <tr>
                    <td>
                        7
                    </td>
                </tr>
                <tr>
                    <td>
                        8
                    </td>
                </tr>
                <tr>
                    <td>
                        9
                    </td>
                </tr>
                <tr>
                    <td>
                        10
                    </td>
                </tr>
                <tr>
                    <td>
                        11
                    </td>
                </tr>
                <tr>
                    <td>
                        12
                    </td>
                </tr>
                <tr>
                    <td>
                        13
                    </td>
                </tr>
                <tr>
                    <td>
                        14
                    </td>
                </tr>
                <tr>
                    <td>
                        15
                    </td>
                </tr>
                <tr>
                    <td>
                        16
                    </td>
                </tr>
                <tr>
                    <td>
                        17
                    </td>
                </tr>
                <tr>
                    <td>
                        18
                    </td>
                </tr>
                <tr>
                    <td>
                        19
                    </td>
                </tr>
                <tr>
                    <td>
                        20
                    </td>
                </tr>
                <tr>
                    <td>
                        21
                    </td>
                </tr>
                <tr>
                    <td>
                        22
                    </td>
                </tr>
                <tr>
                    <td>
                        23
                    </td>
                </tr>
                <tr>
                    <td>
                        24
                    </td>
                </tr>
                <tr>
                    <td>
                        25
                    </td>
                </tr>
                <tr>
                    <td>
                        26
                    </td>
                </tr>
                <tr>
                    <td>
                        27
                    </td>
                </tr>
                <tr>
                    <td>
                        28
                    </td>
                </tr>
                <tr>
                    <td>
                        29
                    </td>
                </tr>
                <tr>
                    <td>
                        30
                    </td>
                </tr>
                <tr>
                    <td>
                        31
                    </td>
                </tr>
                <tr>
                    <td>
                        32
                    </td>
                </tr>
                <tr>
                    <td>
                        33
                    </td>
                </tr>
                <tr>
                    <td>
                        34
                    </td>
                </tr>
                <tr>
                    <td>
                        35
                    </td>
                </tr>
                <tr>
                    <td>
                        36
                    </td>
                </tr>
                <tr>
                    <td>
                        37
                    </td>
                </tr>
                <tr>
                    <td>
                        38
                    </td>
                </tr>
                <tr>
                    <td>
                        39
                    </td>
                </tr>
                <tr>
                    <td>
                        40
                    </td>
                </tr>
                <tr>
                    <td>
                        41
                    </td>
                </tr>
                <tr>
                    <td>
                        42
                    </td>
                </tr>
                <tr>
                    <td>
                        43
                    </td>
                </tr>
                <tr>
                    <td>
                        44
                    </td>
                </tr>
                <tr>
                    <td>
                        45
                    </td>
                </tr>
                <tr>
                    <td>
                        46
                    </td>
                </tr>
                <tr>
                    <td>
                        47
                    </td>
                </tr>
                <tr>
                    <td>
                        48
                    </td>
                </tr>
                <tr>
                    <td>
                        49
                    </td>
                </tr>
                <tr>
                    <td>
                        50
                    </td>
                </tr>
                <tr>
                    <td>
                        51
                    </td>
                </tr>
                <tr>
                    <td>
                        52
                    </td>
                </tr>
                <tr>
                    <td>
                        53
                    </td>
                </tr>
                <tr>
                    <td>
                        54
                    </td>
                </tr>
                <tr>
                    <td>
                        55
                    </td>
                </tr>
            </tbody>
            <tfoot>
                <tr>
                    <td>
                        footer comes here for each page
                    </td>
                </tr>
            </tfoot>
        </table>
    </div>
    <br clear="all" />
    <input type="button" id="print" name="print" value="Print" onclick="javascript:PrintPage();"
        class="button" />
    </form>
</body>
</html>

Solo funciona en Chrome de escritorio. ¡Chrome/Safari en iPhone no funciona!
— Devin Gong
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.