web-dev-qa-db-ja.com

wkhtmltopdf重複する広告ヘッダーを繰り返すコンテンツ

入出力にstdinとstdoutを使用して、Javaアプリケーションにwkhtmltopdf(0.12.1)を埋め込みます。 PDFには複数の(異なる)ヘッダーが必要なので、--header-htmlオプションを使用する代わりに、theadを使用します。これは複数のページで繰り返されます。 HTMLの小さな例を次に示します。

<!DOCTYPE html>
<html>
<body> 
    <table style="page-break-after: always;">
        <thead>
            <tr>
                <th>My first header</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>First content</td>
            </tr>
        </tbody>
    </table>
    <table>
        <thead>
            <tr>
                <th>My second header</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Second content</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

ここまでは順調ですね。コンテンツが複数のページにわたる場合、問題が発生します。ヘッダーはコンテンツの上に重ねて表示されます。例 html および [〜#〜] pdf [〜#〜]trは1ページにしか及ばないため、2番目のヘッダーは適切にレンダリングされていることに注意してください。

他の人々も同様の問題を抱えています。 --header-htmlまたは--header-spacingの追加など、--margin-topオプションを使用している場合、これに対するいくつかの回避策がありますが、これらのオプションは繰り返されるtheadには影響しません。何か案は?

25
Jeroen I.

私はこれらの3つのCSSルールでそれを解決しました:

thead { display: table-header-group; }
tfoot { display: table-row-group; }
tr { page-break-inside: avoid; }
41

この問題を解決するには、次のCSSを追加します。

   tr {
         page-break-inside: avoid;
      }
9
Tunde Pizzle

tr { page-break-inside: avoid; }がある程度機能することがわかりましたが、ヘッダーが複数行にわたる場合は機能しませんでした。私はtheadセクションを保持したかったので、私の解決策は繰り返しをオフにすることでした。

thead, tfoot {
  display: table-row-group;
}
3
Hugh