44
votes

I'm using wkhtmltopdf 0.10.0 rc2 for Mac

I have an html like this one :

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <link href="print.css" rel="stylesheet">
    <style type="text/css" media="screen,print">
      .break{
        display: block;
        clear: both;
        page-break-after: always;
        border :1px solid red
      }
      .page-breaker {
      display: block;
      page-break-after: always;
      border :1px solid red
      }
    </style>
  </head>
  <body>
    <div class="container break">
      page 1
    </div>
    <div class="page-breaker"></div>
    <div class="container">
      page 2
    </div>
  </body>
</html>

I simply try :

wkhtmltopdf test.html test.pdf

But it didn't produce a page-break, I doing something wrong ?

6
I'm using wkhtmltopdf 0.9.9 on OSX, and for me, your markup produces a 3-page PDF. Page 1 is the words 'page 1' surrounded by a red box, page 2 is a plain red line (empty div page-breaker), and page 3 is the words 'page 2' with no outline.Unixmonkey
You're right it work correctly with wkhtmltopdf 0.9.9Awea
Working correctly with wkhtmltopdf 0.11.0 rc2 here as well (Win 7).Joel Peltonen
Doesn't work in 0.12.0mpen
I had similar issues. Got it to work by using page-break-before:always instead. You could try to apply it to the second page and see if it helps.NewInTheBusiness

6 Answers

45
votes

Possibly unrelated as your pdf generated ok with an earlier version of wkhtmltopdf. Either way, I had similar issues with page breaks not being applied correctly. My problem was parent elements of the page-breaked element having an overflow other than visible. This fixed my issue:

* {
  overflow: visible !important;
}

Of course, you can be more specific about the tags this applies to ;)

30
votes

try using as follows

 <div style="page-break-before:always;">
   //your content
</div>

this should work.

15
votes

I am usinf wkhtmltopdf 0.12.3.2

For me page-break-after works when a border is set, and when the breaker div is an immediate child of body.

.page-breaker {
    clear: both;
    display: block;
    border :1px solid transparent;
    page-break-after: always;
}

break-break-before does not work.

--print-media-type not needed.

4
votes

I am using version wkhtmltopdf 0.12.0

For me, page breaks ONLY work with --print-media-type. Without it, page break protection for images works, but not page-break-after or before.

I had to make a special css file for print media to get it work.

Setting the paper size to 'A3' or using the 'overflow: visible' didn't make any difference.

Also see WKHTMLTOPDF with pdfkit on Rails ignoring table page breaks

1
votes

It is working fine after remove media print

Before:

@media print {
    .page-break { height:0;page-break-after: always; margin:0; border-top:none;}
}

above code not working in new version.

Now

.page-break { height:0;page-break-after: always; margin:0; border-top:none;}
1
votes

Update the wkhtmltopdf to version 0.12.5. Page break issue not occuring for me after updating.

Use --disable-smart-shrinking to avoid empty white space ( If you have any)

Use --zoom <value> to avoid page page (If entire page not showing)