HTML转PDF - 使用HtmlRenderer进行分页

18

我尝试使用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。


我也遇到了类似的问题。你解决了吗? - user1071979
我遇到了类似的问题已经两天了... 你解决了吗??? - Mallikarjun
我(实际上是工作中的同事)也遇到了这个问题,他没有找到解决方案。他通过安装HtmlAgilityPack库来加载HTML,然后使用MigraDoc一个一个地创建元素解决了这个问题。 - kiriz
我为添加分页创建了一个解决方案 - 详见 https://dev59.com/rqLia4cB1Zd3GeqPiWNc#53549470 - Matt Eno
5个回答

21

我曾经遇到类似的问题,后来发现了这个GitHub上的拉取请求并解决了它: https://github.com/ArthurHub/HTML-Renderer/pull/41

你可以设置自定义CSS属性

td { page-break-inside: avoid; }

您可以在想要控制分页的所有元素或选择器上使用(例如 td、p、.my-class 等)。

如果您希望库在某些元素上自动控制分页,可以使用“auto”值。

td { page-break-inside: auto; }

这里还有一个在连续文本中分页的例子。


如何引用CSS?我能够生成PDF,但它不考虑任何CSS样式。(我的CSS在不同的文件中 - 不是内联的) - TechTurtle
1
这对我有用,或者至少现在看起来是这样的。<style type="text/css"> td,h1,h2,h3,p { page-break-inside: avoid; } </style> - Alf Kåre Lefdal
1
请注意,通过NuGet等方式获取的官方版本中不包含page-break属性。请直接从GitHub下载程序集。 - nvm-uli
5
可在NuGet的1.5.1测试版中获取。 - abney317

5

虽然来晚了点,但我也遇到了同样的问题。问题在于GeneratePdf调用中设置的margin。将其移除即可解决。

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

1
你可以在 Nuget 上使用预发行版本(1.5.1-beta1),然后: { page-break-inside: avoid; }

1
    table{
    page-break-inside: avoid;    
}

当我使用这个CSS时,我遇到了这个问题。

enter image description here

那我做了什么呢? 我只是设置了也

table{
border:none;
}

如果您想同时显示特定表格的边框,可以使用内联 CSS 或使用特定的表格 ID 设置边框。

这是使用 pdfsharp 生成的 PDF 的最终结果。

enter image description here


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接