2012-08-14 6 views
6

wkhtml nicht wiederholen Tabellenelemente "th" auf jeder Seite wie es sollte. Daher dachte ich, dass es möglich sein könnte, einfach die Option --header-html zu verwenden und die Tabellenköpfe auf diese Weise manuell hinzuzufügen. Aber ich will sie nicht auf der ersten Seite haben, da es bereits Tabellenüberschriften gibt, plus ein paar andere Sachen auf der ersten Seite ... Ich habe eine JS Lösung gefunden, aber es ist zu kompliziert für mich, da ich nur die Grundlagen von JS ... Irgendwelche Ideen?WKHTMLTOPDF: Wie Header auf der ersten Seite deaktivieren

+0

Es ist ein wenig unklar, was du meinst. Wiederholt nicht Tabellenelemente auf jeder Seite? Meinst du Tabellenelemente in den Seitenköpfen? Meinst du es sollte Elemente zu jeder Tabelle in Ihrem Quelldokument hinzufügen? Tabellenköpfe und Seitenköpfe sind zwei verschiedene Bestien, wenn das Handbuch über Header spricht, bedeutet es den Inhalt dessen, was auf jede Seite des generierten PDF-Dokuments geschrieben wird :) – Nenotlep

+0

Ich meine das: Die Tabellenköpfe wiederholen sich nicht auf jeder Seite. Aus diesem Grund möchte ich stattdessen Seitenkopfzeilen anzeigen (die "Tabellenüberschriften" enthalten), die von wkhtml generiert werden. Sie werden korrekt angezeigt, aber ich möchte sie nicht auf der ersten Seite. –

Antwort

14

Haben Sie die JS-Lösung versucht? Es ist eigentlich nicht so kompliziert. Ich habe gerade einen Test mit einer langen HTML-Datei, die eine Tabelle enthalten, die in viele verschiedene Seiten aufgeteilt wird und ich es geschafft, die Header von Seite 1 und 3 unter Verwendung dieser Header-Datei zu entfernen:

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

Sie wichtige Punkte nicht Die Tabelle "headers" befindet sich in einer Tabelle mit der ID "FakeHeaders". Die JavaScript-Funktion subst() wird ausgeführt, wenn der Body geladen wird, und während der Funktion überprüft sie, ob die aktuelle Seite 1 ist oder ob die aktuelle Seite 3 ist. Ist dies der Fall, wird FakeHeaders unsichtbar gesetzt. Sie müssen mit den Rändern und CSS spielen, damit es wie gewünscht aussieht, aber das sollte funktionieren.

Dies ist ein bekanntes Problem mit wkhtmltopdf und höchstwahrscheinlich wird es in nächster Zeit nicht behoben werden, siehe issue 566 in the issue tracker. Ich sehe die JavaScript-Option als die einzige brauchbare Problemumgehung, aber Sie können versuchen, mit divs herumzuspielen oder die Tabellen manuell zu teilen, wenn Ihre Eingabe HTML, Stil und Seitengrößen/Ränder sehr vorhersehbar sind - aber seien Sie gewarnt, es wird wirklich ärgerlich sein.

+0

Ich kann es nicht manuell teilen, weil es verschiedene Zeilenhöhen gibt ... Aber: Ich habe diese JS-Lösung ausprobiert. Ich habe es genau wie du, im Kopfelement. Ich habe Funktionsaufruf und ID hinzugefügt, aber es tut nichts:/... –

+0

Oh, ich habe es falsch gelesen ... Ich habe den Teil übersprungen, wo Sie "Header-Datei" sagen ... Jetzt funktioniert es einfach gut ... Danke !! ! :) –

+0

Toll, dass Sie es funktioniert haben, Paging kann einige lästige Probleme verursachen! :) – Nenotlep

2

Wenn Sie nur die erste Seite als separater HTML aufgeteilt, können Sie dies tun, indem ‚cover‘ in wkhtmltopdf verwenden.

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

Fügen Sie Ihrer Antwort einige Kommentare hinzu – HDJEMAI

Verwandte Themen