我使用iTextPdf从html页面生成pdf文件,如:
iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document);
TextReader reader = new StringReader(HTML);
hw.Parse(reader);
document.Close();
但我的html页面很大,我需要在特定的地方添加页面制动器。
如何在pdf中添加这些分页符?
由于
答案 0 :(得分:12)
因为,iTextSharp在理解少数HTML样式/标签方面确实存在局限性。
这个解决方案有点解决方法:
您需要创建一个扩展HTMLWorker
类的新类
并覆盖为我们提供事件的StartElement
方法
每个html元素的开头。
public class HTMLWorkerExtended : HTMLWorker
{
public HTMLWorkerExtended(IDocListener document): base(document)
{
}
public override void StartElement(string tag, IDictionary<string, string> str)
{
if (tag.Equals("newpage"))
document.Add(Chunk.NEXTPAGE);
else
base.StartElement(tag, str);
}
}
在您的HTML中,在您想要分页的地方添加<newpage />
标记。
现在使用HTMLWorkerExtended
class'对象来解析html。
using (TextReader htmlViewReader = new StringReader(htmlText))
{
using (var htmlWorker = new HTMLWorkerExtended(pdfDocument))
{
htmlWorker.Open();
htmlWorker.Parse(htmlViewReader);
}
}
答案 1 :(得分:5)
尝试在HTML中添加以下内容:
<div style="page-break-before:always"> </div>
答案 2 :(得分:2)
有一个HTMLWorker.ParseToList
。你不能用它吗?
答案 3 :(得分:1)
使用以下内容:
我试过这个并且有效:
<div style="page-break-after:always"> </div>
答案 4 :(得分:1)
如果要插入分页符,请使用此代码:
document.NewPage();