2012-05-09 2 views
9

Я использую iTextSharp DLL в коде ASP.NET. Я собираю данные в набор данных и добавляю набор данных в таблицу PDF.Как добавить номер страницы в нижний колонтитул в PDF от Itextsharp

Если в моем наборе данных имеется более 100 строк, в таблицу PDF будет добавлено 100 строк, а в PDF-файле будет создана 3 или 4 страницы.

Как добавить нижний колонтитул на каждой странице?

+2

Дубликат http://stackoverflow.com/questions/1032614/itextsharp-creating-a-footer-page-of –

ответ

16

Вы должны наследовать от класса PdfPageEventHelper и переопределить методы, показанные в фрагменте кода ниже:

Document doc = new Document(PageSize.A4.Rotate());   

using (MemoryStream ms = new MemoryStream()) 
{ 
    PdfWriter writer = PdfWriter.GetInstance(doc, ms); 
    PageEventHelper pageEventHelper = new PageEventHelper(); 
    writer.PageEvent = pageEventHelper; 
} 

public class PageEventHelper : PdfPageEventHelper 
    { 
     PdfContentByte cb; 
     PdfTemplate template; 


     public override void OnOpenDocument(PdfWriter writer, Document document) 
     { 
      cb = writer.DirectContent; 
      template = cb.CreateTemplate(50, 50); 
     } 

     public override void OnEndPage(PdfWriter writer, Document document) 
     { 
      base.OnEndPage(writer, document); 

      int pageN = writer.PageNumber; 
      String text = "Page " + pageN.ToString() + " of "; 
      float len = this.RunDateFont.BaseFont.GetWidthPoint(text, this.RunDateFont.Size); 

      iTextSharp.text.Rectangle pageSize = document.PageSize; 

      cb.SetRGBColorFill(100, 100, 100); 

      cb.BeginText(); 
      cb.SetFontAndSize(this.RunDateFont.BaseFont, this.RunDateFont.Size); 
      cb.SetTextMatrix(document.LeftMargin, pageSize.GetBottom(document.BottomMargin)); 
      cb.ShowText(text); 

      cb.EndText(); 

      cb.AddTemplate(template, document.LeftMargin + len, pageSize.GetBottom(document.BottomMargin)); 
     } 

     public override void OnCloseDocument(PdfWriter writer, Document document) 
     { 
      base.OnCloseDocument(writer, document); 

      template.BeginText(); 
      template.SetFontAndSize(this.RunDateFont.BaseFont, this.RunDateFont.Size); 
      template.SetTextMatrix(0, 0); 
      template.ShowText("" + (writer.PageNumber - 1)); 
      template.EndText(); 
     } 
    } 
+1

, если вы не видите номер страницы, не забудьте установить документ .bottomMargin, или даже добавить (float) 50 к нему – Shide

+0

Я предполагаю, что это больше не работает? this.RunDateFont не существует. – Justin

+0

this.RunDateFont не является частью iText, а переменной шрифта, определенной во внешнем классе. – bleeeah

-1

Вы должны наследовать pageeventhepler добавить номер страницы динамически Pdf страниц.

public void printPdf() 
{ 
    Document doc = new Document(PageSize.A4.Rotate()); 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     PdfWriter writer = PdfWriter.GetInstance(doc, ms); 
     PageEventHelper pageEventHelper = new PageEventHelper(); 
     writer.PageEvent = pageEventHelper; 
    } 
} 

public class PageEventHelper : PdfPageEventHelper 
{ 
    PdfContentByte cb; 
    PdfTemplate template; 


    public override void OnOpenDocument(PdfWriter writer, Document document) 
    { 
     cb = writer.DirectContent; 
     template = cb.CreateTemplate(50, 50); 
    } 

    public override void OnEndPage(PdfWriter writer, Document document) 
    { 
     base.OnEndPage(writer, document); 

     int pageN = writer.PageNumber; 
     String text = "Page " + pageN.ToString() + " of "; 
     float len = this.RunDateFont.BaseFont.GetWidthPoint(text, this.RunDateFont.Size); 

     iTextSharp.text.Rectangle pageSize = document.PageSize; 

     cb.SetRGBColorFill(100, 100, 100); 

     cb.BeginText(); 
     cb.SetFontAndSize(this.RunDateFont.BaseFont, this.RunDateFont.Size); 
     cb.SetTextMatrix(document.LeftMargin, pageSize.GetBottom(document.BottomMargin)); 
     cb.ShowText(text); 

     cb.EndText(); 

     cb.AddTemplate(template, document.LeftMargin + len, pageSize.GetBottom(document.BottomMargin)); 
    } 

    public override void OnCloseDocument(PdfWriter writer, Document document) 
    { 
     base.OnCloseDocument(writer, document); 

     template.BeginText(); 
     template.SetFontAndSize(this.RunDateFont.BaseFont, this.RunDateFont.Size); 
     template.SetTextMatrix(0, 0); 
     template.ShowText("" + (writer.PageNumber - 1)); 
     template.EndText(); 
    } 
} 
Смежные вопросы