Tengo un proyecto que requiere imprimir una tabla HTML con muchas filas.
Mi problema es la forma en que se imprime la tabla en varias páginas. A veces cortará una fila por la mitad, haciéndola ilegible porque la mitad está en el borde de una página y el resto se imprime en la parte superior de la página siguiente.
La única solución plausible que se me ocurre es usar DIV apilados en lugar de una tabla y forzar saltos de página si es necesario ... pero antes de pasar por todo el cambio, pensé que podría preguntar aquí antes.
html
css
printing
html-table
h3.
fuente
fuente
<thead>
a su tabla con el siguiente CSSthead {display: table-header-group; }
para imprimir el encabezado de la tabla en todas las páginas posteriores (útil para taaaaaaaaaaaa tablas de datos).Respuestas:
fuente
Nota: cuando use el salto de página después: siempre para la etiqueta, creará un salto de página después del último bit de la tabla, ¡creando una página completamente en blanco al final cada vez! Para solucionar esto, simplemente cámbielo a salto de página después: automático. Se romperá correctamente y no creará una página en blanco adicional.
fuente
Expandiendo desde la solución Sinan Ünür:
Parece que
page-break-inside:avoid
en algunos navegadores solo se tiene en cuenta para los elementos de bloque, no para la celda, la tabla, la fila ni el bloque en línea.Si intenta usar
display:block
laTR
etiqueta y la usa allípage-break-inside:avoid
, funciona, pero se complica con el diseño de su tabla.fuente
$(document).ready(function(){$("table tbody th, table tbody td").wrapInner("<div></div>");});
tr { display: block; }
Solo impresión, en lugar de agregar todos los<div>
elementos extraños . (No lo he probado pero vale la pena mirarlo)Ninguna de las respuestas aquí funcionó para mí en Chrome. AAverin en GitHub ha creado algunos Javascript útiles para este propósito y esto funcionó para mí:
Simplemente agregue el js a su código y agregue la clase 'splitForPrint' a su tabla y dividirá la tabla en varias páginas y agregará el encabezado de la tabla a cada página.
fuente
splitForPrint
pero en el JS no hay ningún lugar donde haya tomado la referencia del elemento usando classNamesplitForPrint
. Solo la parte dondevar splitClassName = 'splitForPrint';
pero eso es todo.Use estas propiedades CSS:
Por ejemplo:
vía
fuente
Recientemente resolví este problema con una buena solución.
CSS :
JS :
¡Funciona de maravilla!
fuente
Terminé siguiendo el enfoque de @ vicenteherrera, con algunos ajustes (que posiblemente sean específicos de bootstrap 3).
Básicamente; no podemos romper
tr
s, otd
s porque no son elementos de nivel de bloque. Así que incorporamosdiv
s en cada uno y aplicamos nuestraspage-break-*
reglas contra eldiv
. En segundo lugar; agregamos un poco de relleno en la parte superior de cada uno de estos divs, para compensar los artefactos de estilo.Los ajustes de margen y relleno fueron necesarios para compensar algún tipo de inquietud que se estaba introduciendo (supongo, desde bootstrap). No estoy seguro de presentar una nueva solución de las otras respuestas a esta pregunta, pero creo que quizás esto ayude a alguien.
fuente
Enfrenté el mismo problema y busqué una solución en todas partes, por fin, encontré algo que me funciona para todos los navegadores.
use este CSS o en lugar de CSS puede tener este JavaScript
Espero que esto funcione para ti también.
fuente
Revisé muchas soluciones y nadie funcionaba bien.
Así que probé un pequeño truco y funciona:
pie con estilo:
position: fixed; bottom: 0px;
se coloca en la parte inferior de la última página, pero si el pie de página es demasiado alto, se superpone con el contenido de la tabla.pie con solo:
display: table-footer-group;
no se superpone, pero no está en la parte inferior de la última página ...Pongamos dos pies:
Uno reserva lugar en las últimas páginas, el segundo pone en su pie de página.
fuente
He probado todas las sugerencias anteriores y he encontrado una solución de navegador cruzado simple y funcional para este problema. No hay estilos ni saltos de página necesarios para esta solución. Para la solución, el formato de la tabla debería ser como:
Formato anterior probado y funcionando en navegadores cruzados
fuente
Bueno chicos ... La mayoría de las soluciones aquí arriba no funcionaron. Así es como las cosas funcionaron para mí ...
HTML
El primer conjunto de encabezado se utiliza como un simulado para que no falte un borde superior en el segundo encabezado (es decir, el encabezado original) durante el salto de página.
fuente
La respuesta aceptada no funcionó para mí en todos los navegadores, pero el siguiente CSS me funcionó:
La estructura html fue:
En mi caso, hubo algunos problemas adicionales con el
thead tr
, pero esto resolvió el problema original de evitar que las filas de la tabla se rompieran.Debido a los problemas de encabezado, finalmente terminé con:
Esto no evitó que las filas se rompieran; solo el contenido de cada celda.
fuente