2012-05-09 17 views
9

Używam biblioteki iTextSharp DLL w kodzie ASP.NET. Pobieranie danych do zestawu danych i Dodaj zestaw danych do tabeli PDF.Jak dodać numer strony w stopce w pliku PDF przez Itextsharp

Jeśli mój zestaw danych zawiera więcej 100 wierszy, do tabeli PDF zostanie dodane 100 wierszy, a plik 3 lub 4 zostanie utworzony w pliku PDF.

Jak mogę dodać stopkę na każdej stronie?

+2

Duplikat http://stackoverflow.com/questions/1032614/itextsharp-creating-a-footer-page-of –

Odpowiedz

16

trzeba dziedziczą z klasy PdfPageEventHelper i zastąpić metody przedstawione w poniższym fragmencie kodu:

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

jeśli nie widzisz numer strony, nie zapomnij, aby ustawić swój dokument .bottomMargin, a nawet dodać (przenieść) 50 do niego – Shide

+0

Myślę, że to już nie działa? this.RunDateFont nie istnieje. – Justin

+0

this.RunDateFont nie jest częścią iText, ale zmienną czcionki zdefiniowaną w zewnętrznej klasie. – bleeeah

-1

Musisz dziedziczyć pageeventhepler aby dodać numer strony dynamicznie generowane pdf stron.

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(); 
    } 
} 
Powiązane problemy