2010-02-23 12 views
5

में शीर्षलेख के रूप में PdfPTable मुझे शीर्षलेख के रूप में प्रदर्शित करने के लिए लगभग 12 कक्षों वाली एक तालिका की आवश्यकता है। निम्नलिखित कोड ऐसा करने में विफल रहता है। मुझे पता है टेबल 2 में 12 सेल्स नहीं हैं। दूसरे पृष्ठ पर, केवल "परीक्षण" प्रदर्शित होता है। मैं क्या खो रहा हूँ?iTextSharp

अग्रिम धन्यवाद!

Document document = new Document(); 

     try 
     { 
      PdfWriter.GetInstance(document, new FileStream("TableTest.pdf", FileMode.Create)); 
      document.Open(); 

      PdfPTable table = new PdfPTable(1); 
      table.WidthPercentage = 100; 
      PdfPTable table2 = new PdfPTable(2); 

      //logo 
      PdfPCell cell2 = new PdfPCell(Image.GetInstance(@"C:\path\to\file.gif")); 
      cell2.Colspan = 2; 
      table2.AddCell(cell2); 

      //title 
      cell2 = new PdfPCell(new Phrase("\nTITLE TEXT", new Font(Font.HELVETICA, 16, Font.BOLD | Font.UNDERLINE))); 
      cell2.HorizontalAlignment = Element.ALIGN_CENTER; 
      cell2.Colspan = 2; 
      table2.AddCell(cell2); 

      PdfPCell cell = new PdfPCell(table2); 
      table.HeaderRows = 1; 
      table.AddCell(cell); 
      table.AddCell(new PdfPCell(new Phrase(""))); 

      document.Add(table); 

      document.Add(new Phrase("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntesting")); 
     } 
     catch (DocumentException de) 
     { 
      Console.Error.WriteLine(de.Message); 
     } 
     catch (IOException ioe) 
     { 
      Console.Error.WriteLine(ioe.Message); 
     } 

     document.Close(); 

उत्तर

11

बिंगो! PdfPageEventHandler कक्षा मेरे लिए काम किया।

मैं PdfPageEventHelper OnEndPage विधि अधिभावी प्रयोग किया है:

class _events : PdfPageEventHelper 
{ 
    public override void OnEndPage(PdfWriter writer, Document document) 
    { 
     PdfPTable table = new PdfPTable(1); 
     //table.WidthPercentage = 100; //PdfPTable.writeselectedrows below didn't like this 
     table.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin; //this centers [table] 
     PdfPTable table2 = new PdfPTable(2); 

     //logo 
     PdfPCell cell2 = new PdfPCell(Image.GetInstance(@"C:\path\to\file.gif")); 
     cell2.Colspan = 2; 
     table2.AddCell(cell2); 

     //title 
     cell2 = new PdfPCell(new Phrase("\nTITLE", new Font(Font.HELVETICA, 16, Font.BOLD | Font.UNDERLINE))); 
     cell2.HorizontalAlignment = Element.ALIGN_CENTER; 
     cell2.Colspan = 2; 
     table2.AddCell(cell2); 

     PdfPCell cell = new PdfPCell(table2); 
     table.AddCell(cell); 

     table.WriteSelectedRows(0, -1, document.LeftMargin, document.PageSize.Height - 36, writer.DirectContent); 
    } 
} 

तो, पीडीएफ निर्माण

Document document = new Document(PageSize.A4, 36, 36, 36 + <height of table>, 36); // note height should be set here 
_events e = new _events(); 
PdfWriter pw = PdfWriter.GetInstance(document, new FileStream("TableTest.pdf", FileMode.Create)); 
pw.PageEvent = e; 
document.Open(); 

for(int i=0;i<100;i++) 
{ 
    document.Add(new Phrase("TESTING\n")); 
} 

document.Close(); 
0

यदि आप एक से अधिक पृष्ठ है काम नहीं करेगा। यदि आपके पास एक से अधिक पेज हैं, तो आपको ऑनपेज ईवेंट की बजाय ऑनस्टार्ट पेज ईवेंट का उपयोग करने की आवश्यकता है।

1

मैंने 'एन' पंक्तियों के साथ पीडीएफपीटेबल बनाते समय प्रत्येक पृष्ठ पर हेडर पंक्ति जोड़ने के लिए एक बहुत ही सरल दृष्टिकोण का उपयोग किया, जहां 'एन' कोई पूर्णांक हो सकता था। मैं iTextSharp 4.0.4.0 का उपयोग कर रहा हूँ।

तो, आप 1000 पंक्तियों या 2 पंक्तियों या 5000 पंक्तियों वाली एक तालिका बना सकते हैं, लेकिन iTextSharp स्वचालित रूप से आपके लिए आउटपुट पृष्ठ देगा। ITextSharp क्या नहीं करेगा स्वचालित रूप से प्रत्येक पृष्ठ की शुरुआत के लिए एक शीर्षलेख जोड़ता है।

प्रत्येक पृष्ठ के लिए एक शीर्ष लेख पंक्ति जोड़ने के लिए, सभी मैंने किया था उसके सभी पंक्तियों और कोशिकाओं साथ PdfPTable बनाने के बाद कोड की एक पंक्ति जोड़ने था, और उसके बाद iTextSharp स्वचालित रूप से एक शीर्ष लेख पंक्ति के साथ उत्पादन पृष्ठांकित। 'टेबल' पीडीएफपीटेबल का उदाहरण है जिसे मैंने अपने हेडररोज़ संपत्ति को सेट करने से पहले अपने कोड में बनाया था।

table.HeaderRows = 1; //this will automatically insert a header row 
         //at start of every page. The first row you created 
         //in your code will be used as the header row in this case.