2012-01-03 89 views

Respuesta

84

Usted puede usar la siguiente:

<style type="text/css"> 
    table { page-break-inside:auto } 
    tr { page-break-inside:avoid; page-break-after:auto } 
</style> 

Consulte la especificación del W3C CSS Print Profile para más detalles.

Y también remítase al Salesforce developer forums.

+10

Esto no funciona para Safari (6) o Chrome (24) :( – David

+0

debajo de la solución funciona para Safari o Chrome –

+0

trabajo s en Chrome v30 –

-1

Aquí se muestra un ejemplo:

a través de CSS:

<style> 
    .my-table { 
    page-break-before: always; 
    page-break-after: always; 
    } 
    .my-table tr { 
    page-break-inside: avoid; 
    } 
</style> 

o directamente sobre el elemento:

<table style="page-break-before: always; page-break-after: always;"> 
    <tr style="page-break-inside: avoid;"> 
    .. 
    </tr> 
</table> 
+0

Esto utiliza con éxito 4 páginas para lo que es efectivamente una tabla de 2 páginas y parece tener el mismo efecto que no tener CSS en Safari (6) y Chrome (24). – David

14

Dondequiera que desea aplicar un descanso, ya sea un table o tr, necesitas dar una clase por ej. page-break con CSS como se mencionan a continuación:

/* class works for table row */ 
table tr.page-break{ 
    page-break-after:always 
} 

<tr class="page-break"> 

/* class works for table */ 
table.page-break{ 
    page-break-after:always 
} 

<table class="page-break"> 

y funcionará como lo requiere

Alternativamente, también puede tener div estructura para la misma:

CSS:

@media all { 
.page-break { display: none; } 
} 

@media print { 
.page-break { display: block; page-break-before: always; } 
} 

Div :

<div class="page-break"></div> 
+13

Esto solo funciona si sabe con anticipación exactamente cuántas filas caben en una página (ya que tiene que declarar los saltos de página directamente en su marcado). Esto podría ser difícil (o imposible) si existe la posibilidad de que los datos en una fila de la tabla se envuelvan en una segunda línea. ¿Y qué hay de los múltiples tamaños de página (A4 frente a Carta de EE. UU. Frente a Legal de EE. UU.)? – aapierce

+0

Esta solución no funcionó para mí cuando utilizo celdas de varias líneas y varias columnas. Encontré una solución a eso, sin embargo: https://stackoverflow.com/a/47498775/43615 - También se ocupa del problema @aapierce menciona. –

+0

No se pudo hacer funcionar el 'tr' de interrupción en Chrome v64. –

7

He buscado una solución para esto. Tengo un sitio móvil de jquery que tiene una página de impresión final y combina docenas de páginas. He intentado todas las revisiones de arriba, pero la única cosa que podría llegar al trabajo es la siguiente:

<div style="clear:both!important;"/></div> 
<div style="page-break-after:always"></div> 
<div style="clear:both!important;"/> </div> 
8

Desafortunadamente los ejemplos anteriores no funcionó para mí en Chrome.

Se me ocurrió la siguiente solución donde puede especificar la altura máxima en PX de cada página. Esto dividirá la tabla en tablas separadas cuando las filas sean iguales a esa altura.

$(document).ready(function(){ 

    var MaxHeight = 200; 
    var RunningHeight = 0; 
    var PageNo = 1; 

    $('table.splitForPrint>tbody>tr').each(function() { 

     if (RunningHeight + $(this).height() > MaxHeight) { 
      RunningHeight = 0; 
      PageNo += 1; 
     } 

     RunningHeight += $(this).height(); 

     $(this).attr("data-page-no", PageNo); 

    }); 

    for(i = 1; i <= PageNo; i++){ 

     $('table.splitForPrint').parent().append("<div class='tablePage'><hr /><table id='Table" + i + "'><tbody></tbody></table><hr /></div>"); 

     var rows = $('table tr[data-page-no="' + i + '"]'); 

     $('#Table' + i).find("tbody").append(rows); 
    } 
    $('table.splitForPrint').remove(); 

}); 

También tendrá el siguiente en la hoja de estilos

div.tablePage { 
     page-break-inside:avoid; page-break-after:always;    
    } 
0

esto está funcionando para mí:

<td> 
    <div class="avoid"> 
    Cell content. 
    </div> 
</td> 
... 
<style type="text/css"> 
    .avoid { 
    page-break-inside: avoid !important; 
    margin: 4px 0 4px 0; /* to keep the page break from cutting too close to the text in the div */ 
    } 
</style> 

A partir de este hilo: avoid page break inside row of table

Cuestiones relacionadas