2012-08-14 51 views
6

wkhtml no repite los elementos de tabla "th" en cada página como debería. Así que pensé que podría ser posible simplemente usar la opción --header-html y agregar los encabezados de tabla manualmente de esta manera. Pero no los quiero en la primera página, ya que hay encabezados de tabla, además de otras cosas de la primera página ... Encontré una solución JS, pero es demasiado complicada para mí, ya que sé lo básico de JS ... ¿Alguna idea?WKHTMLTOPDF: cómo deshabilitar encabezado en la primera página

+0

Es un poco claro a qué se refiere. No repite elementos de tabla en cada página? ¿Te refieres a los elementos de la tabla en los encabezados de página? ¿Quiere decir que debería agregar elementos a cada tabla en su documento fuente? Los encabezados de tabla y encabezados de página son dos bestias diferentes, cuando el manual habla de encabezados significa el contenido de lo que se coloca en cada página del documento PDF generado :) – Nenotlep

+0

Quiero decir que: los encabezados de tabla no se repiten en todas las páginas. Por ese motivo, quiero mostrar los encabezados de página en su lugar (que contendrán "encabezados de tabla"), generados por wkhtml. Se muestran correctamente, pero no los quiero en la primera página. –

Respuesta

14

¿Has probado la solución JS? En realidad no es tan complicado. Acabo de hacer una prueba con un archivo html desde hace tiempo que contenía una mesa que se divide en diferentes páginas y me las arreglé para eliminar los encabezados de la página 1 y 3 utilizando este archivo de cabecera:

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

los elementos claves de no es que los "encabezados" de la tabla están contenidos en una tabla que tiene el ID "FakeHeaders". La función javascript subst() se ejecuta cuando el cuerpo está cargado y durante la función comprueba si la página actual es 1 o si la página actual es 3 y, si lo es, FakeHeaders se establece como invisible. Tendrá que jugar con los márgenes y CSS para que se vea como usted quiere, pero esto debería funcionar.

Este es un problema conocido con wkhtmltopdf y lo más probable es que no se solucione pronto, ver issue 566 in the issue tracker. Veo la opción de JavaScript como la única solución utilizable, pero puede intentar jugar con divs o dividir manualmente las tablas si su entrada html, estilo y tamaño de página/márgenes son muy predecibles, pero tenga cuidado, será realmente molesto.

+0

No puedo dividirlo manualmente porque hay varias alturas de línea ... Pero: probé esta solución JS. Lo obtuve exactamente como tú, en el elemento principal. Agregué función de llamada e identificación, pero no hace nada:/... –

+0

Oh, lo leí mal ... Me salté la parte donde dices "archivo de encabezado" ... Ahora funciona bien ... ¡¡Gracias !! ! :) –

+0

¡Genial para que funcione, la paginación puede causar algunos problemas molestos! :) – Nenotlep

2

Si puede dividir la primera página solo como un html por separado, puede hacerlo usando 'cover' en 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

Agregue algunos comentarios a su respuesta – HDJEMAI

Cuestiones relacionadas