2012-05-09 17 views
9

द्वारा पीडीएफ में पाद लेख में पृष्ठ संख्या कैसे जोड़ें ISP.NET कोड में iTextSharp DLL का उपयोग कर रहा हूं। मैं डेटासेट में डेटा ला रहा हूं और डेटासेट को पीडीएफ टेबल में जोड़ रहा हूं।Itextsharp

यदि मेरे डेटासेट में 100 पंक्तियां हैं तो 100 पंक्तियों को पीडीएफ तालिका में जोड़ा जाएगा और 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, या यहां तक ​​कि इसे जोड़ें (फ्लोट) 50 इसे – Shide

+0

मुझे लगता है कि यह अब और काम नहीं करता है? यह .RunDateFont मौजूद नहीं है। – Justin

+0

यह .RunDateFont iText का हिस्सा नहीं है लेकिन बाहरी वर्ग में परिभाषित फ़ॉन्ट चर है। – bleeeah

-1

आप को जोड़ने के लिए पेज नंबर डायनामिक पीडीएफ पृष्ठों उत्पन्न करने के लिए pageeventhepler वारिस चाहिए।

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(); 
    } 
}