我尝试使用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。
答案 0 :(得分: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; }
在运行文本中还有一个分页的例子。
答案 1 :(得分:5)
这有点晚了,但我遇到了同样的问题。问题是GeneratePdf调用上设置的边距。删除它,它很好。
PdfDocument pdf = PdfGenerator.GeneratePdf(htmlContent, PdfSharp.PageSize.A4);
答案 2 :(得分: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>";
}
答案 3 :(得分:0)
您可以在Nuget(1.5.1-beta1)中使用预发布版本,然后:
td { page-break-inside: avoid; }