HTML到PDF - 使用PdfSharp和HtmlRenderer分页

问题描述 投票:16回答:4

我尝试使用PdfSharp和HtmlRenderer将HTML转换为PDF。这是代码的一部分:

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;
}

除了分页符,一切正常。在某些页面上,我的结果就像在这张图片上

HTML page break

有可能解决这个问题吗? HTML内容是简单的html,只包含标题和段落,没有其他标签。我对iTextSharp没有这个问题,但在这个项目中我必须使用PdfSharp和MigraDoc。

c# html-to-pdf html-renderer
4个回答
16
投票

当我在github上发现这个拉取请求时,我遇到了类似的挑战并解决了它:https://github.com/ArthurHub/HTML-Renderer/pull/41

您可以设置custom-css-property

td { page-break-inside: avoid; }

在你想要的所有元素或选择器(td,p,.my-class等)上控制分页。

如果希望库控制某些元素的分页,则可以使用值“auto”

td { page-break-inside: auto; }

在运行文本中还有一个页面中断示例。


5
投票

这有点晚了,但我遇到了同样的问题。问题是GeneratePdf调用上设置的边距。删除它,它很好。

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

0
投票

如果您不使用表,也可以通过添加适当的DIV标记来解决此问题。

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
投票

您可以在Nuget(1.5.1-beta1)中使用prerelase版本,然后:

td { page-break-inside: avoid; }

© www.soinside.com 2019 - 2024. All rights reserved.