2012-08-14 5 views
6

wkhtml non ripete gli elementi della tabella "th" su ogni pagina come dovrebbe. Quindi ho pensato che fosse possibile usare semplicemente l'opzione --header-html e aggiungere le intestazioni della tabella manualmente in questo modo. Ma non li voglio nella prima pagina, dato che ci sono già intestazioni di tabelle, oltre ad altre cose della prima pagina ... Ho trovato qualche soluzione JS, ma è troppo complicata per me, dal momento che conosco solo le basi di JS ... Qualche idea?WKHTMLTOPDF: Come disabilitare l'intestazione nella prima pagina

+0

E 'un po' poco chiaro quello che vuoi dire. Non ripete gli elementi della tabella su ogni pagina? Intendi gli elementi della tabella nelle intestazioni delle pagine? Vuoi dire che dovrebbe aggiungere elementi ad ogni tabella nel tuo documento sorgente? Le intestazioni di tabella e le intestazioni di pagina sono due bestie diverse, quando il manuale parla di intestazioni indica il contenuto di ciò che viene inserito in ogni pagina del documento PDF generato :) – Nenotlep

+0

Voglio dire che: Le intestazioni di tabella non si ripetono su ogni pagina. Per questo motivo voglio mostrare invece le intestazioni di pagina (che conterranno "intestazioni di tabella"), generate da wkhtml. Sono visualizzati correttamente, ma non li voglio nella prima pagina. –

risposta

14

Hai provato la soluzione JS? In realtà non è così complicato. Ho appena fatto una prova con un file html lungo che conteneva una tabella che viene diviso in molte pagine diverse e sono riuscito a rimuovere le intestazioni da pagina 1 e 3 utilizzando questo file di intestazione:

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <script> 
     function subst() { 
      var vars={}; 
      var x=document.location.search.substring(1).split('&'); 
      for (var i in x) {var z=x[i].split('=',2);vars[z[0]] = unescape(z[1]);} 
      var x=['frompage','topage','page','webpage','section','subsection','subsubsection']; 
      for (var i in x) { 
      var y = document.getElementsByClassName(x[i]); 
      for (var j=0; j<y.length; ++j) y[j].textContent = vars[x[i]]; 

      if(vars['page'] == 1){ // If page is 1, set FakeHeaders display to none 
       document.getElementById("FakeHeaders").style.display = 'none'; 
      } 

      if(vars['page'] == 3) { // If page is 3, set FakeHeaders display to none 
       document.getElementById("FakeHeaders").style.display = 'none'; 
      } 
      } 
     } 
     </script> 
    </head> 
    <body style="border:0;margin:0;" onload="subst()"> 
     <table style="border-bottom: 1px solid pink; width: 100%; margin-bottom:5px;" id="FakeHeaders"> 
      <tr> 
      <th>Your awesome table column header 1</th> 
      <th>Column 2</th> 
      <th style="text-align:right"> 
       Page <span class="page"></span>/<span class="topage"></span> 
      </th> 
      </tr> 
     </table> 
    </body> 
</html> 

Essi punti chiave per non c'è che la tabella "header" è contenuta in una tabella che ha l'ID "FakeHeaders". La funzione javascript subst() viene eseguita quando il corpo è caricato e durante la funzione controlla se la pagina corrente è 1 o se la pagina corrente è 3 e se lo è, le FakeHeaders sono impostate come invisibili. Avrai bisogno di giocare con i margini e il CSS per farlo apparire come vuoi ma questo dovrebbe funzionare.

Questo è un problema noto con wkhtmltopdf e molto probabilmente non verrà risolto in qualsiasi momento a breve, vedere issue 566 in the issue tracker. Vedo l'opzione JavaScript come unica soluzione utilizzabile, ma puoi provare a giocare con le div o dividere manualmente le tabelle se l'input in html, lo stile e le dimensioni/margini delle pagine sono molto prevedibili, ma attenzione, sarà davvero noioso.

+0

Non posso dividerlo manualmente perché ci sono varie altezze di linea ... Ma: ho provato questa soluzione JS. Ho capito esattamente come te, in testa. Ho aggiunto la funzione call e id, ma non fa nulla:/... –

+0

Oh, ho letto male ... Ho saltato la parte in cui dici "header file" ... Ora funziona bene ... Grazie !! ! :) –

+0

Grande che hai funzionato, il paging può causare alcuni fastidiosi problemi! :) – Nenotlep

2

Se è possibile dividere la prima pagina da sola come un html separato, è possibile farlo utilizzando "copertina" in WKHTMLTOPDF.

PDFKit.new(url, :header_html => header_url, :cover => cover_url). 
0
<script type="text/javascript"> 
    var pdfInfo = {}; 
    var x = document.location.search.substring(1).split('&'); 

    for (var i in x) { var z = x[i].split('=',2); pdfInfo[z[0]] = unescape(z[1]); } 

    function getPdfInfo() { 
     var page = pdfInfo.page || 1; 

     if(page != 1) { 
      document.getElementById('pHeader').style.display = 'none'; 
     } 
    } 
    getPdfInfo(); 
</script> 
+1

Aggiungi alcuni commenti alla tua risposta – HDJEMAI