ItextSharp:如何使用ItextSharp设置动态标题。C#Net

ItextSharp:如何使用ItextSharp设置动态标题。C#Net,c#,itext,C#,Itext,我正在创建3页的PDF,所有3页都应该有3个不同的标题。我在文档中遇到了一个例子,但是下面的代码不起作用 public class ReportPdfHeaderFooter : PdfPageEventHelper { public void SetHeader(string header) { this._header = header; } public override void OnEnd

我正在创建3页的PDF,所有3页都应该有3个不同的标题。我在文档中遇到了一个例子,但是下面的代码不起作用

  public class ReportPdfHeaderFooter : PdfPageEventHelper
  {
        public void SetHeader(string header)
        {
            this._header = header;
        }

        public override void OnEndPage(PdfWriter writer, Document document)
        {
            base.OnEndPage(writer, document);
            PdfPTable table = new PdfPTable(1);
            table.AddCell(title);
            footer.WriteSelectedRows(0, -1, Pdf.MarginLeft, document.Bottom, writer.DirectContent);
         }
   }

  public CreatePdf()
  {
       private Document _doc;
       private MemoryStream _memStream;
       private PdfWriter _pdfWriter;
       this._doc = new Document();
       this._memStream = new MemoryStream();
       this._pdfWriter = PdfWriter.GetInstance(this._doc, _memStream);
       var reportPdfHeaderFooter = new ReportPdfHeaderFooter();

       _pdfWriter.PageEvent = headerFooter;
       reportPdfHeaderFooter.SetHeader("Header 1");
       _doc.Open();
       reportPdfHeaderFooter.SetHeader("Header 2");
       _doc.NewPage();
       _doc.Close();
 }

我已经完全完成了文档中提到的任何操作,但仍然在这两个页面中获得标题2。

尽管看起来您的思路正确,但对于上面的
ReportPdfHeaderFooter
类来说,一定是一个坏的复制/粘贴,它不会按原样编译

这里有一个简单的工作示例来帮助您开始

首先是
PdfPageEventHelper
实现:

public class PageEventHeader : PdfPageEventHelper
{
    public string HeaderText { get; set; }

    public override void OnEndPage(PdfWriter writer, Document document)
    {
        float cellHeight = document.TopMargin;
        Rectangle page = document.PageSize;
        PdfPTable table = new PdfPTable(1) { TotalWidth = page.Width };
        table.AddCell(new PdfPCell(new Phrase(HeaderText)) 
        { 
            Border = PdfPCell.NO_BORDER,
            FixedHeight = cellHeight,
            HorizontalAlignment = Element.ALIGN_CENTER
        });
        table.WriteSelectedRows(
            0, -1, 0,
            page.Height - cellHeight + table.TotalHeight,
            writer.DirectContent
        );
    }
}
第二,测试PDF文件创建:

using (var stream = new MemoryStream())
{
    var header = new PageEventHeader();
    using (Document document = new Document())
    {
        var writer = PdfWriter.GetInstance(document, stream);
        document.Open();

        writer.PageEvent = header;
        header.HeaderText = "Header 0";
        document.Add(new Phrase("Header 0"));
        document.NewPage();
        header.HeaderText = "Header 1";
        document.Add(new Phrase("Header 1"));
    }
    File.WriteAllBytes(OUTPUT_FILE, stream.ToArray());
}

谢谢,我还是没有得到两个头球。两个页面都显示标题1@ManishMakkad-不知道该说什么。我总是在给出答案之前测试代码。上面的代码在每页上正确设置了不同的标题文本。您可能希望使用您正在使用的确切代码编辑您的问题。同样,您提供的代码示例不完整,因为它无法编译。例如,
ReportPdfHeaderFooter.OnEndPage()
有一个名为
footer
的变量,该变量从未声明/定义过。我发布了一半的代码片段,我发现了问题,谢谢:)