HTML to PDF - page break with HtmlRenderer

30.5k Views Asked by At

I try to convert HTML to PDF using HtmlRenderer. This is part of code:

private byte[] CreateHtmlContent()
{
    string htmlContent = File.ReadAllText(@"htmlExample.txt");

    using (MemoryStream ms = new MemoryStream())
    {
        PdfDocument pdfDocument = new PdfDocument();
        PdfDocument pdf = PdfGenerator.GeneratePdf(htmlContent, PdfSharp.PageSize.A4, 60);
        pdf.Save(ms);
        res = ms.ToArray();
    }
    return res;
}

Everything works fine except page break. On some pages I have result like on this image

HTML page break

Is it possible to fix this? HTML content is simple HTML that contains only headings and paragraphs and no other tags. I had no problem with iTextSharp but on this project I have to use PDFSharp and MigraDoc.

5

There are 5 best solutions below

0
On
    table{
    page-break-inside: avoid;    
}

When I used this CSS I was facing this issue.

enter image description here

So what I did? I just set also

table{
border:none;
}

if you want to show the border for a specific table also, you can use inline CSS or set border by using a specific table id.

Here is the final result of the pdf generated using pdfsharp.

enter image description here

4
On

I had a similar challenge and resolved it as I found this pull request on github: https://github.com/ArthurHub/HTML-Renderer/pull/41

You can set the custom-css-property

td { page-break-inside: avoid; }

on all elements or selectors you want (td, p, .my-class, etc.) to control the page breaking.

You can use the value "auto" if you want the library to control your page breaking on certain elements

td { page-break-inside: auto; }

There is also a example for page breaking in running text.

0
On

This is also resolved by adding an appropriate DIV tag if you're not using tables.

foreach (DataRow row in group)
            {
                HTMLoutput += "<div style=\"page-break-inside: avoid\"> ";
                HTMLoutput += "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
                HTMLoutput += "</div>";
            }
0
On

You can use the prerelase version in Nuget (1.5.1-beta1) and then:

td { page-break-inside: avoid; }

0
On

This is a little late, but I ran into the same issue. The problem is the margin set on the GeneratePdf call. Remove it and it's fine.

    PdfDocument pdf = PdfGenerator.GeneratePdf(htmlContent, PdfSharp.PageSize.A4);