【问题标题】:HTML to PDF - page break with PdfSharp and HtmlRendererHTML 到 PDF - 使用 PdfSharp 和 HtmlRenderer 的分页符
【发布时间】:2016-10-06 05:44:53
【问题描述】:

我尝试使用 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 内容是仅包含标题和段落而没有其他标签的简单 html。我对 iTextSharp 没有这个问题,但在这个项目中我必须使用 PdfSharp 和 MigraDoc。

【问题讨论】:

  • 我面临着类似的问题。你解决了吗?
  • 我从 2 天开始就面临着类似的问题。你解决了吗???
  • 我(实际上是同事)遇到了这个问题,他没有找到解决办法。他通过安装用于加载 HTML 的 HtmlAgilityPack 库并使用 MigraDoc 逐个元素地创建元素来“解决”了这个问题。
  • 我创建了一个解决方法来添加分页符 - 详细信息在 stackoverflow.com/a/53549470/1118569

标签: c# html-to-pdf html-renderer


【解决方案1】:

当我在 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; }

还有一个在运行文本中分页的例子。

【讨论】:

  • 如何包含对 CSS 的引用?我能够生成 PDF,但它不考虑任何 CSS 样式。 (我的 css 在不同的文件中 - 不是内联的)
  • 这对我有用,或者至少现在看起来是这样。
  • 请注意,通过 NuGet 等提供的正式版本中不包含分页符属性。请直接从 GitHub 下载程序集。
  • 它在 NuGet 的 1.5.1 测试版中可用
【解决方案2】:

这有点晚了,但我遇到了同样的问题。问题是在 GeneratePdf 调用上设置的边距。去掉就好了。

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

【讨论】:

    【解决方案3】:

    如果您不使用表格,也可以通过添加适当的 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>";
                }
    

    【讨论】:

      【解决方案4】:

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

      td { page-break-inside: avoid; }

      【讨论】:

        【解决方案5】:
            table{
            page-break-inside: avoid;    
        }
        

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

        那我做了什么? 我刚刚也设置了

        table{
        border:none;
        }
        

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-27
          • 1970-01-01
          • 2020-05-05
          • 2012-07-02
          • 1970-01-01
          • 2012-09-27
          • 2022-01-05
          相关资源
          最近更新 更多