【问题标题】:iTextPdf how to break pageiTextPdf 如何分页
【发布时间】:2012-12-07 06:53:38
【问题描述】:

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 您可能想尝试使用 ABCPdf。它很好用,但不是免费的!
    • 见上面 T Gupta 的回答。我使用他的方法来解析 CKEditor 内置的“分页符”功能,并且成功了。
    【解决方案2】:

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

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

    【讨论】:

    【解决方案3】:

    因为,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中,添加&lt;newpage /&gt;标签,无论你想要分页符。

    • 现在使用HTMLWorkerExtended class' 对象来解析 html。

      using (TextReader htmlViewReader = new StringReader(htmlText))
       {
          using (var htmlWorker = new HTMLWorkerExtended(pdfDocument))
            {
               htmlWorker.Open();
               htmlWorker.Parse(htmlViewReader);
            }
       }
      

    【讨论】:

    • 似乎可以正常工作,但总是在第一页添加新页面的位置不合适
    • 使用 CKEditor 内置分页符(CSS 属性 style="page-break-after : always"
    【解决方案4】:

    使用以下内容:

    我已经尝试过了,它确实有效:

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

    【讨论】:

      【解决方案5】:

      当您想插入分页符时使用此代码:

      document.NewPage();

      【讨论】:

        猜你喜欢
        • 2015-04-04
        • 1970-01-01
        • 1970-01-01
        • 2018-01-16
        • 1970-01-01
        • 2017-06-14
        • 2018-01-11
        • 2013-04-01
        • 2023-03-18
        相关资源
        最近更新 更多