2012-08-14 16 views
6

wkhtml, her sayfada olması gerektiği gibi tablo öğelerini "th" tekrarlamıyor. Bu yüzden --header-html seçeneğini kullanmanın ve tablo başlıklarını bu şekilde manuel olarak eklemenin mümkün olabileceğini düşündüm. Ama onları ilk sayfada istemiyorum, çünkü zaten masa üstbilgileri ve diğer bazı ilk sayfa öğeleri var ... Bazı JS çözümlerini buldum, ama benim için çok karmaşık bir şey. JS ... Herhangi bir fikir?WKHTMLTOPDF: İlk sayfadaki başlık nasıl devre dışı bırakılır

+0

Bu demek istediğini biraz belirsiz. Her sayfada tablo öğelerini tekrarlamıyor musunuz? Sayfa başlıklarındaki tablo öğelerini mi kastediyorsunuz? Kaynak belgenizdeki her bir tabloya öğeleri eklemesi gerektiği anlamına mı geliyor? Tablo üstbilgileri ve sayfa başlıkları iki farklı canavardır, el kitabında başlıklar hakkında konuşulduğunda, oluşturulan PDF belgesinin her sayfasına neyin girdiği hakkında bilgi verilir :) – Nenotlep

+0

Bunu demek istiyorum: Tablo başlıkları her sayfada tekrarlanmıyor. Bu nedenle, wkhtml tarafından oluşturulan sayfa başlıklarını ("tablo başlıkları" içerecek) görüntülemek istiyorum. Doğru şekilde görüntüleniyorlar, ancak onları ilk sayfada istemiyorum. –

cevap

14

JS çözümünü denediniz mi? Aslında o kadar da karmaşık değil. Sadece farklı birçok sayfa ayrılmıştır bir tablo içeren uzun bir html dosyası ile bir test yaptım ve bu başlık dosyasını kullanarak sayfa 1 ve 3 numaralı başlıklarını kaldırmak başardı:

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

Onlar kilit noktaları değil Tablo "üstbilgileri" kimliği "FakeHeaders" kimliğine sahip bir tabloda bulunur. Javascript işlevi subst(), gövde yüklendiğinde ve işlev sırasında geçerli sayfanın 1 olup olmadığını veya geçerli sayfa 3 ise ve FakeHeaders görünmez olarak ayarlandığında çalışır. İstediğiniz gibi görünmesi için kenar boşlukları ve CSS ile oynamanız gerekecek ama bu işe yaramalı.

Bu wkhtmltopdf ile ilgili bilinen bir sorundur ve büyük olasılıkla herhangi bir zamanda düzeltilemez, bkz. issue 566 in the issue tracker. JavaScript seçeneğini sadece kullanılabilir geçici çözüm olarak görüyorum, ancak giriş html, stil ve sayfa boyutları/kenar boşlukları çok öngörülebilirse, div'lerle oynamayı veya tabloları manuel olarak bölmeyi deneyebilirsiniz - ancak uyarılırsınız, gerçekten can sıkıcı olacaktır.

+0

Elle eşleştiremiyorum çünkü çeşitli hat yükseklikleri var ... Ama: Bu JS çözümünü denedim. Tam olarak senin gibi, kafa elemanında var. Fonksiyon çağrısı ve kimliği ekledim, ama hiçbir şey yapmıyor:/... –

+0

Ah Yanlış okuduğumda ... "Başlık dosyası" dediğin kısmı atladım ... Şimdi gayet iyi çalışıyor ... Teşekkürler! ! :) –

+0

Çalıştığınız için harika, çağrı yapmak bazı can sıkıcı sorunlara neden olabilir! :) – Nenotlep

2

İlk sayfayı tek başına ayrı bir html olarak bölebilirsiniz, bunu WKHTMLTOPDF'de 'cover' kullanarak yapabilirsiniz.

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

Cevabınıza bazı yorumlar ekleyin – HDJEMAI

İlgili konular