iTextPdf如何打破页面

iho*_*rko 7 c# pdf asp.net 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();
Run Code Online (Sandbox Code Playgroud)

但我的html页面很大,我需要在特定的地方添加页面制动器.

如何在pdf中添加这些分页符?

谢谢

T G*_*pta 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);
    }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 在您的html中,<newpage />在需要分页符的任何位置添加标记.

  • 现在使用HTMLWorkerExtended类'对象来解析html.

    using (TextReader htmlViewReader = new StringReader(htmlText))
     {
        using (var htmlWorker = new HTMLWorkerExtended(pdfDocument))
          {
             htmlWorker.Open();
             htmlWorker.Parse(htmlViewReader);
          }
     }
    
    Run Code Online (Sandbox Code Playgroud)


mal*_*sem 5

尝试在HTML中添加以下内容:

<div style="page-break-before:always">&nbsp;</div>
Run Code Online (Sandbox Code Playgroud)


Gri*_*air 2

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

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