wkhtml不会在每个页面上重复表格元素“th”。所以我认为可以简单地使用--header-html选项并以这种方式手动添加表头。但是我不希望它们出现在第一页,因为已经有表头,加上其他一些第一页的东西......我找到了一些JS解决方案,但它对我来说太复杂了,因为我只知道它的基础知识JS ......有什么想法吗?
答案 0 :(得分:18)
您是否尝试过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的已知问题,很可能不会很快修复,请参阅issue 566 in the issue tracker。我认为JavaScript选项是唯一可用的解决方法,但如果您的输入html,样式和页面大小/边距是可预测的,您可以尝试使用div或手动拆分表 - 但要注意,它会非常烦人。 / p>
答案 1 :(得分:1)
如果您可以将第一页单独拆分为单独的html,则可以使用&#39; cover&#39;在WKHTMLTOPDF中。
PDFKit.new(url, :header_html => header_url, :cover => cover_url).
答案 2 :(得分:1)
我遇到了类似的问题,其中我使用了WKHTMLTOPDF
页眉/页脚,并且想将它们从封面上删除。问题是页眉/页脚的最大高度仍然出现在包括封面在内的所有页面上。
让我大吃一惊并节省了一天的解决方案是,我生成了两个WKHTMLTOPDF
文件,一个在所有页面上都有页眉/页脚,而另一个则没有任何页眉/页脚。然后,我从WKHTMLTOPDF
生成的文件(没有页眉/页脚)中选择了封面,并从所有其他WKHTMLTOPDF
生成的文件的页头/页脚中选择了其余页面。我使用了PDF Merger
中的PHP
库来合并两个WKHTMLTOPDF
生成的“ PDF”文件的选定页面,以生成单个PDF
文件,其封面和页眉/页脚位于其余部分页面。
答案 3 :(得分: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>
答案 4 :(得分:0)
由于某种原因,内诺特莱普的答案对我没有用。它只删除了页码。
所以我创建了一个带有显示的类:none;并简单地添加它。它以这种方式工作。
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>