9

wkhtml 不会像应有的那样在每个页面上重复表格元素“th”。所以我认为可以简单地使用 --header-html 选项并以这种方式手动添加表头。但我不希望它们出现在第一页,因为已经有表头,加上其他一些第一页的东西......我找到了一些 JS 解决方案,但它对我来说太复杂了,因为我只知道最基本的JS ...有什么想法吗?

4

5 回答 5

20

你试过JS解决方案吗?其实没那么复杂。我刚刚用一个长的 html 文件进行了测试,该文件包含一个分成许多不同页面的表,我设法使用这个头文件从第 1 页和第 3 页中删除了标题:

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

他们的关键点是表“标题”包含在 ID 为“FakeHeaders”的表中。javascript 函数 subst() 在加载正文时运行,并在函数期间检查当前页面是否为 1 或当前页面是否为 3,如果是,则将 FakeHeaders 设置为不可见。您将需要使用边距和 CSS 以使其看起来像您想要的那样,但这应该可以工作。

这是 wkhtmltopdf 的一个已知问题,很可能不会很快解决,请参阅问题跟踪器中的问题 566。我认为 JavaScript 选项是唯一可用的解决方法,但是如果您的输入 html、样式和页面大小/边距非常可预测,您可以尝试使用 div 或手动拆分表格 - 但请注意,这真的很烦人。

于 2012-08-14T10:33:17.563 回答
2

如果您可以将第一页单独拆分为单独的 html,则可以通过在 WKHTMLTOPDF 中使用“封面”来实现。

PDFKit.new(url, :header_html => header_url, :cover => cover_url).
于 2015-03-17T13:28:36.577 回答
1

我遇到了类似的问题,我曾使用WKHTMLTOPDF页眉/页脚,我想将它们从封面中删除。问题是页眉/页脚的最大高度仍然出现在包括封面在内的所有页面上。

点击我的想法并节省了一天的解决方案是我生成了两个WKHTMLTOPDF文件,一个在所有页面上都有页眉/页脚,另一个没有任何页眉/页脚。然后,我从生成的文件中选择没有页眉/页脚的封面页,WKHTMLTOPDF并从其他WKHTMLTOPDF生成的文件中选择所有页面上的页眉/页脚的其余页面。我使用PDF MergerPHP来合并两个WKHTMLTOPDF生成的“PDF”文件的选定页面,以PDF在其余页面上生成带有封面和页眉/页脚的单个文件。

于 2018-07-23T17:32:52.217 回答
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>
于 2016-10-11T15:55:38.593 回答
0

出于某种原因,Nenotlep 的回答对我不起作用。它只删除了页码..

所以我创建了一个带有显示的类:无;并简单地添加了它。它以这种方式工作。

function pagination() {
  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) {
      var element = document.getElementById("pager");
      element.classList.add("pager-hidden");
    }
  }

}
.pager {
  font-size: 0.09375in;
  padding-right: 1.00003in;
  text-align: right;
  letter-spacing: 0.01042in;
  padding-bottom: 0.37501in;
}

.pager.pager-hidden {
  display: none;
}
<body onload="pagination()">

  <div class="pager" id="pager">
    <div class="pager-pages">Page <span class="page"></span> / <span class="topage"></span></div>
  </div>

</body>

于 2018-08-16T15:36:31.213 回答