walle / gimli

Utility for converting markup files to pdf files
https://github.com/walle/gimli
MIT License
538 stars 44 forks source link

Page break after heading 3 is not avoided #78

Closed NAR closed 7 years ago

NAR commented 7 years ago

Hello!

I have a large document where sometimes the generated PDF contains a page break just after a heading which looks ugly. Even though the CSS contains page-break-after: avoid !important; for headings, it is not avoided in this case. I created a minimal example. The command line I use is the following:

gimli -file lorem.md -stylesheet lorem.css -w '--page-size A4 --margin-top 15mm --margin-bottom 15mm --margin-left 30mm --margin-right 30mm'

The Markdown file:

# Lorem Ipsum

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec eget lectus quis sapien auctor ornare dictum non ex. Mauris at tellus malesuada, vulputate neque vel, porttitor ipsum. Etiam viverra a arcu vel porta. Nullam metus risus, bibendum et rhoncus non, mollis a diam. Etiam massa nisl, fermentum vitae tristique eget, porttitor et eros. Sed in elementum dolor, quis rutrum felis. Donec enim risus, rhoncus non justo ut, bibendum dapibus leo. Quisque nisl metus, convallis et mollis non, imperdiet non eros. Curabitur tempor sed lorem et ultrices.

Pellentesque consectetur, dolor vel scelerisque gravida, ante neque cursus leo, vel aliquet tortor metus vel ante. Donec molestie mollis tincidunt. Ut a interdum nisl. Duis scelerisque eget diam sed facilisis. Pellentesque sollicitudin massa blandit, eleifend quam vel, molestie turpis. Mauris et mollis quam, convallis suscipit dui. Sed a ligula elementum, condimentum dui quis, pellentesque ante. Sed sollicitudin magna non libero ornare venenatis. Duis a cursus diam. Pellentesque dolor felis, accumsan id felis in, tristique facilisis nisi. Mauris dui erat, feugiat non consequat id, tincidunt in quam.

Vivamus commodo diam eu luctus eleifend. Cras libero ligula, auctor nec interdum quis, fermentum ac nisi. Phasellus elementum mi at elit vehicula posuere. Vivamus a quam magna. Vivamus venenatis neque quis dignissim pretium. Cras non eleifend tellus, sed tincidunt tortor. Sed eros nunc, accumsan in tempus id, vestibulum ac tellus. Pellentesque mollis velit a odio mollis imperdiet.

Integer tristique massa et nunc elementum rhoncus. Integer pharetra pretium augue, quis imperdiet orci tristique eu. Sed iaculis tristique efficitur. Morbi rutrum magna neque, vitae ultrices massa bibendum vitae. Sed pellentesque id ipsum vel cursus. Fusce sem leo, convallis non purus nec, fermentum euismod diam. Donec porttitor sodales massa, in imperdiet lectus consectetur a. Donec commodo sodales metus at porta. Aenean ultricies viverra velit sed gravida. Maecenas at mauris arcu. Sed lobortis eros at libero ultrices elementum. Integer non orci non quam facilisis gravida. Phasellus ultricies dui eget purus posuere ornare. Curabitur non magna tellus. Integer commodo dictum nibh, vitae scelerisque lorem imperdiet et. Quisque pharetra felis at consequat bibendum.

Sed dapibus, magna sed lacinia vestibulum, dui odio rutrum nibh, vitae faucibus dui nibh tincidunt eros. Fusce sollicitudin mattis pellentesque. Donec vel erat eu mi ornare imperdiet sit amet sed felis. Morbi facilisis purus sed ligula varius eleifend. Pellentesque non aliquam metus. Quisque et orci sem. Ut vitae neque et massa pretium bibendum ut quis neque. Nam finibus diam neque, non maximus risus pretium non. Maecenas eu justo faucibus ipsum pharetra condimentum. Proin at orci finibus, mattis quam et, ultrices velit. Nam cursus quam at odio pretium rhoncus. Aliquam a vulputate felis, vel scelerisque metus. Aliquam sit amet congue nisi, a elementum diam. Etiam cursus, lorem ut cursus condimentum, tortor erat cursus ligula, et gravida libero dolor in mi. Proin lacus dui, efficitur ac euismod ut, ornare nec arcu. Proin fringilla sit amet turpis in pharetra.

## Heading 2

### Heading 3

Etiam lobortis accumsan est, in sodales libero sagittis vel. Donec luctus pharetra quam. In tempor bibendum orci, sit amet tincidunt nisl interdum tempus. Fusce efficitur, est at gravida vulputate, ante ligula tempor lectus, et pretium sapien ante eu tortor. Sed eget malesuada orci. Fusce sagittis consequat nunc quis consequat. Phasellus id placerat purus. Duis efficitur purus lacus, id gravida quam finibus at. Vivamus iaculis velit et mollis scelerisque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse sed porttitor magna, ac mattis mauris. Donec lacinia, quam quis tincidunt tincidunt, odio tortor consequat mi, a aliquet dolor nisi at est. Integer sollicitudin egestas lorem ac aliquam.

Pellentesque sagittis accumsan urna, id iaculis neque porta non. Sed fringilla urna eu augue sagittis, sed accumsan leo pellentesque. Suspendisse elementum augue in mi viverra lacinia. Phasellus posuere ante nec egestas elementum. Cras tempus odio id vehicula mollis. Donec posuere arcu nec consequat ultricies. Integer finibus, massa quis scelerisque cursus, ex velit consequat dui, ut faucibus nisi purus nec libero. Pellentesque suscipit vel velit vitae finibus. Nam sollicitudin varius ligula, sed facilisis est aliquet et. Suspendisse potenti. Duis id arcu ut sapien ultricies vestibulum vitae interdum lectus. Suspendisse nibh lacus, auctor a malesuada eget, tempus a elit. Vivamus augue ligula, efficitur non sagittis nec, ornare a arcu.

Vestibulum vulputate auctor elit, vitae gravida quam auctor at. Vivamus posuere sem vel magna pulvinar, ac fringilla sem venenatis. Suspendisse suscipit finibus dui sit amet tempus. Ut mattis a dolor sit amet malesuada. In hac habitasse platea dictumst. Praesent tincidunt condimentum vehicula. Quisque at tincidunt magna. Vivamus fringilla egestas tortor, at hendrerit nulla facilisis at. Pellentesque suscipit vestibulum maximus.

Suspendisse a diam quis sapien volutpat mattis. Proin tempus dictum lectus, et sodales diam. Mauris accumsan massa quis lacus pulvinar, sit amet eleifend nulla scelerisque. Pellentesque ut diam purus. Nunc sit amet mauris eu justo vestibulum varius nec vel neque. Ut iaculis turpis efficitur nisi condimentum, id iaculis dolor lobortis. Sed a ex mattis, dapibus turpis et, ultricies ligula. Donec sed aliquet nisi, eu ultricies eros. Duis et nisl quis tortor tristique aliquam. Nunc porta tincidunt lectus. Ut sagittis ligula in commodo auctor. Maecenas nec neque lectus. Nulla tristique sodales quam varius tincidunt. Morbi at orci maximus, dapibus ipsum et, hendrerit massa. Aliquam congue nec erat vel dignissim.

Mauris sit amet orci sed augue condimentum rhoncus in quis risus. Etiam sit amet porta justo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque id dignissim nisi, sit amet accumsan arcu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris laoreet imperdiet mauris id imperdiet. Fusce tincidunt turpis vitae elit blandit, sodales rhoncus ligula ultrices. Mauris ornare scelerisque commodo. Etiam eu mauris vitae nunc sodales efficitur. Sed ut ante pellentesque, ornare augue ut, porttitor est. Suspendisse non dolor quis magna efficitur aliquam eu vitae neque. Nam luctus porta auctor. Sed erat diam, condimentum at diam id, interdum vulputate nulla. 

and the CSS file:

body {
   font-size: 11pt;
   font-family: Arial;
}

a {
   cursor: text;
   color: #000;
   text-decoration: none;
}

p {
   margin-top: 9pt;
   margin-bottom: 9pt;
}

pre {
   font-family: "DejaVu Sans Mono";
   font-size: 10pt;
   padding: 0 8pt 0 0;
}

h1, h2, h3, h4, h5, h6 {
   page-break-after: avoid !important;
   margin-bottom: 6pt;
}

h1 {
   page-break-before: always;
   font-size: 18pt;
   margin-top: 1cm;
   margin-bottom: 0;
}

h2 {
   color: #595959;
   font-size: 14pt;
   margin-top: 15pt;
   margin-bottom: 0;
}

h2 code {font-size: 14pt;}

h3 {
   font-size: 13pt;
   margin-top: 12pt;
   margin-bottom: 0pt;
}

h4 {
   font-size: 12pt;
   margin-top: 12pt;
   margin-bottom: 0pt;
}

h5 {
   font-size: 11pt;
   margin-top: 12pt;
   margin-bottom: 0pt;
}

I have attached the generated PDF. I tested with the latest Docker image. Is there a way to avoid page breaks just after headings?

NAR commented 7 years ago

See also https://github.com/wkhtmltopdf/wkhtmltopdf/issues/3441

walle commented 7 years ago

Hi! The only solution I've found for this is manual intervention. You can add a <div class="page-break"></div> just before the header that should be on the next page.

E.g.

Sed dapibus, magna sed lacinia vestibulum, dui odio rutrum nibh, vitae faucibus dui nibh tincidunt eros. Fusce sollicitudin mattis pellentesque. Donec vel erat eu mi ornare imperdiet sit amet sed felis. Morbi facilisis purus sed ligula varius eleifend. Pellentesque non aliquam metus. Quisque et orci sem. Ut vitae neque et massa pretium bibendum ut quis neque. Nam finibus diam neque, non maximus risus pretium non. Maecenas eu justo faucibus ipsum pharetra condimentum. Proin at orci finibus, mattis quam et, ultrices velit. Nam cursus quam at odio pretium rhoncus. Aliquam a vulputate felis, vel scelerisque metus. Aliquam sit amet congue nisi, a elementum diam. Etiam cursus, lorem ut cursus condimentum, tortor erat cursus ligula, et gravida libero dolor in mi. Proin lacus dui, efficitur ac euismod ut, ornare nec arcu. Proin fringilla sit amet turpis in pharetra.

<div class="page-break"></div>

## Heading 2

### Heading 3

Etiam lobortis accumsan est, in sodales libero sagittis vel. Donec luctus pharetra quam. In tempor bibendum orci, sit amet tincidunt nisl interdum tempus. Fusce efficitur, est at gravida vulputate, ante ligula tempor lectus, et pretium sapien ante eu tortor. Sed eget malesuada orci. Fusce sagittis consequat nunc quis consequat. Phasellus id placerat purus. Duis efficitur purus lacus, id gravida quam finibus at. Vivamus iaculis velit et mollis scelerisque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse sed porttitor magna, ac mattis mauris. Donec lacinia, quam quis tincidunt tincidunt, odio tortor consequat mi, a aliquet dolor nisi at est. Integer sollicitudin egestas lorem ac aliquam.
NAR commented 7 years ago

The manual intervention worked, thanks.