iTextPdf如何打破页面

时间:2012-12-19 20:22:34

标签: c# asp.net pdf pdf-generation itextsharp

我使用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中添加这些分页符?

由于

5 个答案:

答案 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">&nbsp;</div>

答案 2 :(得分:2)

有一个HTMLWorker.ParseToList。你不能用它吗?

  1. 从ParseToList获取n个元素
  2. 将前x个元素添加到PDF
  3. 在PDF上调用NewPage
  4. 将剩余元素添加到PDF

答案 3 :(得分:1)

使用以下内容:

我试过这个并且有效:

<div style="page-break-after:always">&nbsp;</div>

答案 4 :(得分:1)

如果要插入分页符,请使用此代码:

document.NewPage();