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 の既知の問題であり、すぐには修正されない可能性が高いです。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 に答える