wkhtml は、すべてのページでテーブル要素 "th" を繰り返すわけではありません。そのため、単純に --header-html オプションを使用して、この方法でテーブル ヘッダーを手動で追加できると考えました。しかし、テーブルヘッダーと他の最初のページのものがあるので、それらを最初のページにしたくありません... JSソリューションを見つけましたが、非常に基本的なことしか知らないので、私には複雑すぎますJS... 何かアイデアはありますか?
17826 次
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 の既知の問題であり、すぐには修正されない可能性が高いです。Issue tracker の問題 566 を参照してください。JavaScript オプションが唯一の使用可能な回避策だと思いますが、入力 html、スタイル、およびページ サイズ/マージンが非常に予測可能な場合は、div をいじったり、テーブルを手動で分割したりすることができますが、注意してください。
于 2012-08-14T10:33:17.563 に答える
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 に答える