2012-01-03 7 views

risposta

84

È possibile utilizzare il seguente:

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

, consultare le specifiche del W3C CSS Print Profile per i dettagli.

E fare anche riferimento allo Salesforce developer forums.

+10

Questo non funziona per Safari (6) o Chrome (24) :( – David

+0

Sotto soluzione funziona per Safari o Chrome –

+0

Lavoro s in Chrome v30 –

-1

Ecco un esempio:

tramite CSS:

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

o direttamente sull'elemento:

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

Questo utilizza correttamente 4 pagine per quella che è effettivamente una tabella di 2 pagine e sembra avere lo stesso effetto di nessun css in Safari (6) e Chrome (24). – David

14

Ovunque si desidera applicare una pausa, o un table o tr, devi dare una lezione per l'ex. page-break con i CSS come di seguito indicate:

/* 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"> 

e funzionerà come richiesto

In alternativa, si può anche avere div struttura per la stessa:

CSS:

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

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

Div :

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

Funziona solo se sai in anticipo esattamente quante righe si adatteranno a una pagina (dato che devi dichiarare le interruzioni di pagina direttamente nel tuo markup). Ciò potrebbe essere difficile (o impossibile) se esiste la possibilità che i dati in una riga della tabella possano essere inseriti in una seconda riga. E che dire di più formati di pagina (A4 vs US Letter vs US Legal)? – aapierce

+0

Questa soluzione non ha funzionato con me quando si utilizzano celle multilinea e più colonne. Ho trovato una soluzione a questo, però: https://stackoverflow.com/a/47498775/43615 - Si occupa anche del problema di @aapierce. –

+0

Impossibile ottenere l'interruzione 'tr' per funzionare in Chrome v64. –

7

Ho cercato una soluzione per questo. Ho un sito mobile jquery che ha una pagina di stampa finale e combina dozzine di pagine. Ho provato tutte le correzioni sopra, ma l'unica cosa che ho potuto ottenere al lavoro è questo:

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

Purtroppo gli esempi di cui sopra non ha funzionato per me in Chrome.

Mi è venuta in mente la soluzione di seguito in cui è possibile specificare l'altezza massima in PX di ciascuna pagina. In questo modo, la tabella verrà divisa in tabelle separate quando le righe saranno uguali a tale altezza.

$(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(); 

}); 

Sarà inoltre necessario il seguito nel foglio di stile

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

questo sta lavorando per me:

<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> 

Da questa discussione: avoid page break inside row of table

Problemi correlati