2012-05-09 21 views
9

Sto usando iTextSharp DLL nel codice ASP.NET. Sto recuperando un dato nel set di dati e aggiungo il set di dati nella tabella PDF.Come aggiungere il numero di pagina nel piè di pagina in PDF di Itextsharp

Se il set di dati contiene più di 100 righe, verranno aggiunte 100 righe alla tabella PDF e 3 o 4 pagine verranno create nel file PDF.

Come posso aggiungere il piè di pagina in ogni pagina?

+2

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

risposta

16

È necessario ereditare dalla classe PdfPageEventHelper e sovrascrivere i metodi indicati nel frammento di codice qui sotto:

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

se non si vede il numero di pagina, non dimenticate di impostare il documento .bottomMargin, o anche aggiungere (float) 50 ad esso – Shide

+0

Immagino che questo non funzioni più? this.RunDateFont non esiste. – Justin

+0

this.RunDateFont non fa parte di iText ma è una variabile di carattere definita nella classe esterna. – bleeeah

-1

È necessario ereditare pageeventhepler di aggiungere il numero di pagina a generata dinamicamente pagine 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(); 
    } 
} 
Problemi correlati