2012-08-14 30 views
6

wkhtml không lặp lại các phần tử bảng "th" trên mọi trang như mong muốn. Vì vậy, tôi nghĩ rằng nó có thể có thể chỉ đơn giản là sử dụng tùy chọn --header-html và thêm các tiêu đề bảng bằng tay theo cách này. Nhưng tôi không muốn chúng trên trang đầu tiên, vì có các tiêu đề bảng, cộng với một số công cụ trang đầu tiên khác ... Tôi đã tìm thấy một số giải pháp JS, nhưng nó quá phức tạp đối với tôi, vì tôi chỉ biết những điều cơ bản của JS ... Có ý kiến ​​gì không?WKHTMLTOPDF: Cách vô hiệu hóa tiêu đề trên trang đầu tiên

+0

Đó là một chút không rõ ràng những gì bạn có ý nghĩa. Không lặp lại các yếu tố bảng trên mỗi trang? Bạn có nghĩa là các yếu tố bảng trong tiêu đề trang? Bạn có nghĩa là nó nên thêm yếu tố vào mỗi bảng trong tài liệu nguồn của bạn? Tiêu đề bảng và tiêu đề trang là hai con thú khác nhau, khi hướng dẫn nói về tiêu đề, có nghĩa là nội dung của những gì được đưa vào mỗi trang của tài liệu PDF được tạo :) – Nenotlep

+0

Ý tôi là: Tiêu đề bảng không lặp lại trên mỗi trang. Vì lý do đó, tôi muốn hiển thị tiêu đề trang thay thế (sẽ chứa "tiêu đề bảng"), được tạo bởi wkhtml. Chúng được hiển thị chính xác, nhưng tôi không muốn chúng trên trang đầu tiên. –

Trả lời

14

Bạn đã thử giải pháp JS chưa? Nó thực sự không phức tạp. Tôi chỉ cần làm một thử nghiệm với một tập tin html dài có chứa một bảng được chia thành nhiều trang khác nhau và tôi quản lý để loại bỏ các tiêu đề từ trang 1 và 3 sử dụng tập tin tiêu đề này:

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

Họ điểm mấu chốt để không đó là bảng "tiêu đề" được chứa trong một bảng có ID "FakeHeaders". Hàm javascript subst() được chạy khi cơ thể được nạp và trong khi nó kiểm tra nếu trang hiện tại là 1 hoặc nếu trang hiện tại là 3 và nếu có, FakeHeaders sẽ được đặt ẩn. Bạn sẽ cần phải chơi với các lề và CSS để làm cho nó trông giống như bạn muốn nhưng điều này nên làm việc.

Đây là vấn đề đã biết với wkhtmltopdf và rất có thể nó sẽ không được khắc phục bất kỳ lúc nào, xem issue 566 in the issue tracker. Tôi thấy tùy chọn JavaScript là giải pháp có thể sử dụng duy nhất, nhưng bạn có thể thử chơi với div hoặc tách bảng theo cách thủ công nếu đầu vào html, kiểu và kích thước trang/lề của bạn rất dễ đoán trước - nhưng được cảnh báo, nó sẽ thực sự gây phiền toái.

+0

Tôi không thể chia nó theo cách thủ công vì có nhiều chiều cao dòng khác nhau ... Nhưng: Tôi đã thử giải pháp JS này. Tôi đã nhận nó chính xác như bạn, trong yếu tố đầu. Tôi đã thêm chức năng gọi và id, nhưng nó không có gì:/... –

+0

Oh tôi đọc nó sai ... Tôi bỏ qua phần mà bạn nói "tập tin tiêu đề" ... Bây giờ nó hoạt động tốt ... Cảm ơn !! ! :) –

+0

Tuyệt vời mà bạn đã làm nó hoạt động, phân trang có thể gây ra một số vấn đề gây phiền nhiễu! :) – Nenotlep

2

Nếu bạn có thể tách riêng trang đầu tiên thành một html riêng biệt, bạn có thể thực hiện việc này bằng cách sử dụng 'bìa' trong 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

Thêm một số nhận xét vào câu trả lời của bạn – HDJEMAI

Các vấn đề liên quan