2014-12-19 14 views
6

Ho bisogno di aggiungere gradienti di sfondo ad alcuni elementi TD e TH in pagina che viene convertito in PDF, ma sto ottenendo alcuni molto strano comportamento da wkhtmltopdf, in modo da quando faccio questo:Come posso ottenere wkhtmltopdf per visualizzare i gradienti di sfondo th e td?

table { 
 
    width: 100%; 
 
    border-collapse: collapse; 
 
} 
 

 
th { 
 
    height: 60px; 
 
    border: 1px solid Black; 
 
} 
 

 
td { 
 
    height: 100px; 
 
    background: -webkit-linear-gradient(top, #ccc 0%, #888 100%); 
 
    border: 1px solid Black; 
 
}
<table> 
 
    <tr> 
 
    <th></th> 
 
    </tr> 
 
    <tr> 
 
    <td></td> 
 
    </tr> 
 
    <tr> 
 
    <td></td> 
 
    </tr> 
 
</table>

L'altezza del th sembra in qualche modo invadere ogni successivo td. Tutto va bene se rimuovo il th o imposta la sua altezza su un multiplo intero dell'altezza td.

Qualcuno ha qualche idea su cosa sta succedendo qui? Il mio HTML è difficile da modificare, quindi spero di riuscire a farlo funzionare usando solo il CSS o le impostazioni di wkhtmltopdf.

Edit:

Alcuni screenshots prima della bontà scadenza:

Ecco come appare in un browser webkit:

enter image description here

Ecco cosa wkhtmltopdf fa ad esso:

enter image description here

E un'ulteriore osservazione: non è necessario essere un th per causare il problema, in quanto la modifica di uno stesso target <td class='th'> causerà lo stesso effetto.

+0

Purtroppo non funzionerò. Tuttavia, si può ancora fare una soluzione quasi CSS solo usando un'immagine come sfondo. questo funzionerebbe per te? – Nenotlep

+0

Un CSS con soluzione di immagini sarebbe abbastanza buono per me, tuttavia anche con questo approccio si osserva un rendering glitch simile. – stovroz

+0

Entrambi i seguenti hanno lo stesso per me: 'background: -webkit-gradient (lineare, sinistra in alto, in basso a destra, color-stop (0%, rgba (25, 25, 175, 1)), color-stop (33%, rgba (25, 25, 175, 1)), color-stop (100%, rgba (93, 168, 226, 1))) ' e' background: -webkit-gradient (lineare, a sinistra in alto , in basso a destra, da (rgba (25, 25, 175, 1)), a (rgba (93, 168, 226, 1))); ' – rainabba

risposta

-1

Utilizzare i CSS incorporati per questa pagina che convertono in pdf.

+0

Il CSS è già in linea. – stovroz

+0

Ho visto questo consiglio per altri problemi WKHtmltoPdf e penso che potrebbe essere obsoleto perché non ha funzionato in nessuno dei casi che ho provato (intestazioni/piè di pagina anche). Sto usando 12.1 o più recente. – rainabba

0

Cosa ne pensi?

<style> 
    .table { 
     width: 100%; 
     display:table; 
     border-collapse: collapse; 
    } 

    .tr { 
     height: 60px; 
     display:table-row; 
    border: 1px solid Black; 
    } 

    .td, .th{ 
     height: 60px; 
     border: 1px solid Black; 
     display:table-cell; 
     background: -webkit-linear-gradient(top, #ccc 0%, #888 100%); 
    } 
</style> 
    <div class="table"> 
     <div class="tr"> 
      <div class="th"></div> 
     </div> 
     <div class="tr"> 
      <div class="td"></div> 
     </div> 
     <div class="tr"> 
      <div class="td"></div> 
     </div> 
    </div> 

È meglio utilizzare DIV al posto dei tavoli. Puoi fare la stessa cosa con piccole modifiche. Ed è meglio per voi aggiungere CSS in linea all'HTML se lavorate in PDF o inviate via email come modello.

UPDATE:

Si può fare questo:

<style> 
    table { 
    width: 100%; 
    border-collapse: collapse; 
} 

th { 
    height: 60px; 
} 
td{height: 100px;} 
td, th { 
    background: -webkit-linear-gradient(top, #ccc 0%, #888 100%); 
    border: 1px solid Black; 
} 
</style> 


<table> 
    <tr> 
    <th></th> 
    </tr> 
    <tr> 
    <td></td> 
    </tr> 
    <tr> 
    <td></td> 
    </tr> 
</table> 

o jQuery per sostituire le tabelle con div annidati:

<style> 
    .table { 
     width: 100%; 
     display:table; 
     border-collapse: collapse; 
    } 
    .table .tr{ 
     display:table-row; 
    } 

    .table .th{ 
     height: 60px; 
     font-weight:bold; 
    } 
    .table .td{height: 100px;} 
    .table .th, 
    .table .td { 
     border: 1px solid Black; 
     display:table-cell; 
     background: -webkit-linear-gradient(top, #ccc 0%, #888 100%); 
    } 
</style> 


<table> 
    <tr> 
    <th>a</th> 
    </tr> 
    <tr> 
    <td>b</td> 
    </tr> 
    <tr> 
    <td>c</td> 
    </tr> 
</table> 

<script> 
    $(document).ready(function(){ 
     $("table").each(function(a,table){ 
      var i=a; 
      $(table).after('<div class="table" id="table-'+i+'"></div>'); 

      var currentTH = $(this).parent().find('th'); 
      $(currentTH).each(function(){ 
       var content=$(this).html(); 
       $('#table-'+i).append(' <div class="tr"><div class="th">'+content+'</div></div>'); 
      }); 

      var currentTD = $(this).parent().find('td'); 
      $(currentTD).each(function(){ 
       var content=$(this).html(); 
       $('#table-'+i).append(' <div class="tr"><div class="td">'+content+'</div></div>'); 
      }); 

      $(this).remove(); 
     }); 
    }); 
</script> 
+0

Grazie per il suggerimento, ma la conversione di tutte le mie tabelle (non sono in realtà tabelle a colonna singola vuota) in div nidificate non è davvero una soluzione praticabile nel mio caso. – stovroz

+0

Ok aggiorno la mia risposta, guarda questa soluzione. l'ultima soluzione jQuery sostituisce il tuo tavolo con div nasted. È possibile aggiornare questa soluzione a jquery, salvare alcuni attributi e inserirli in nuovi elementi div. –

3

wkhtmltopdf utilizza ancora il vecchio (deprecato) gradiente webkit sintassi.Prova questo:

-webkit-gradient(linear, left top, left bottom, from(#ccc), to(#888)); 
+2

Non ho modificato il risultato con questa sintassi, temo. – stovroz

0

Abbiamo dovuto aggiornare wkhtmltopdf per ragioni di sicurezza e abbiamo sperimentato lo stesso problema, ma dopo aver lottato con i CSS sono riuscito a trovare una soluzione che ha funzionato per noi, per esempio, il seguente CSS:

.TableRecords_Header { 
 
     color:#EAEAEA; 
 
     font-weight: normal; 
 
    background: #0F5D85 url(/RichWidgets/img/bar_gradient.png); 
 
     white-space: nowrap; 
 
     line-height: 18px; 
 
     padding: 4px 6px 4px 6px; 
 
     border-right: 1px solid white; 
 
     font-size: 14px; 
 
}

applicato a qualsiasi tavolo <th> o <tr> cellule, rende qualcosa di simile: Gradient Bug

Si scopre che questa versione di WebKit ha problemi di movimentazione proprietà CSS "repeat-x", quindi, per risolvere questo problema che ho usato questo CSS3 Equivalente:

.TableRecords_Header { 
 
    background-repeat: no-repeat !important; 
 
    background-size: 100% 23px !important; 
 
}

Dove background-repeat: no-repeat! Important; dice al webkit di non usare la ripetizione dello sfondo eliminando il problema. Come per background-size, il valore 100% fa lo stesso come l'originale repeat-x, e la 23px è l'altezza dell'immagine che produce il gradiente. in questo caso è l'altezza di /RichWidgets/img/bar_gradient.png. Quando abbiamo aggiunto questo stile CSS3 PDF reso correttamente come mostrato nell'immagine seguente:

Gradient problem solved

migliori saluti, Nuno Guedes

1

Per me è stato semplice come l'aggiunta

background-repeat: no-repeat !important;