6

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

谢谢

4

5 回答 5

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类的对象来解析 html。

    using (TextReader htmlViewReader = new StringReader(htmlText))
     {
        using (var htmlWorker = new HTMLWorkerExtended(pdfDocument))
          {
             htmlWorker.Open();
             htmlWorker.Parse(htmlViewReader);
          }
     }
    
于 2013-09-10T11:15:28.177 回答
5

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

<div style="page-break-before:always">&nbsp;</div>
于 2012-12-19T20:56:34.903 回答
2

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

  1. 从 ParseToList 中获取 n 个元素
  2. 将前 x 个元素添加到 PDF
  3. 在 PDF 上调用 NewPage
  4. 将剩余元素添加到 PDF
于 2012-12-19T21:31:13.477 回答
2

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

文档.NewPage();

于 2017-06-07T12:36:09.610 回答
1

使用以下内容:

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

<div style="page-break-after:always">&nbsp;</div>
于 2016-10-14T18:19:45.373 回答