2014-07-09 15 views
15

Osadzamy wkhtmltopdf (0.12.1) w aplikacji Java, używając stdin i stdout dla wejścia/wyjścia. Chcemy wielu (różnych) nagłówków w naszym pliku PDF, więc zamiast używać opcji --header-html używamy thead, która jest powtarzana na kilku stronach. Oto mały przykład HTML:wkhtmltopdf powtarzające nagłówki i nakładające się treści

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

Jak dotąd tak dobrze. Problemy pojawiają się, gdy zawartość obejmuje wiele stron. Nagłówek jest następnie wyświetlany na górze treści, nakładając się na nią. Przykład html i PDF. Zauważ, że drugi nagłówek jest renderowany poprawnie, ponieważ tr obejmuje tylko jedną stronę.

Inne osoby miały podobne problemy. Istnieje kilka sposobów obejścia tego problemu podczas korzystania z opcji --header-html, takiej jak dodanie --header-spacing lub --margin-top, ale te opcje nie mają wpływu na powtórzone thead. Jakieś pomysły?

+2

ten jest znanym problemem wkhtmltopdf, patrz [problem 1524] (https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1524). – ashkulz

Odpowiedz

5

rozwiązujesz ten problem, dodając następujące css.

tr { 
     page-break-inside: avoid; 
     } 
+0

To rozwiązanie zadziałało dla mnie –

25

Rozwiązałem go z tymi zasadami trzy CSS:

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

Mieliśmy złożony wieloliniowy nagłówek z wieloma colspans i rowspans, a to rozwiązanie działało idealnie dla nas. – Sayyid

+0

wielkie dzięki! Miałem problem z tym błędem przez długi czas, a to rozwiązanie działało idealnie w moim pliku PDF – Alfchee

2

znalazłem tr { page-break-inside: avoid; } działało do pewnego stopnia, ale nie wtedy, gdy moje nagłówki trwała wiele linii. Ponieważ chciałem zachować moją sekcję thead, moim rozwiązaniem było wyłączenie powtórzenia.

thead, tfoot { 
    display: table-row-group; 
} 
+1

To zrobiło to za mnie! – sattu

Powiązane problemy