2012-10-23 152 views
0

我有一個List<object>這個列表包含數千條記錄。我想用itextsharp生成pdf。和Pdfptable生成PDF它工作正常,但我只想在pdf中每頁10條記錄。
我該怎麼做?設置固定的每頁行數,使用itextsharp生成PDF

+0

怎麼樣一個循環檢索(最多)從該列表中10項,創建這些項目表,增加了表格文檔,並進入下一頁?或者我誤解了你的問題? – mkl

+0

是的。這工作得很好,但我表只覆蓋了一半的PDF頁面,另一半仍然是空白的,我想表格10行將覆蓋整個PDF頁面..它是如何做到的..? – SST

回答

2

另一種方式來設置每頁行數:

using System.Diagnostics; 
using System.IO; 
using iTextSharp.text; 
using iTextSharp.text.pdf; 

namespace RowsCountSample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (var pdfDoc = new Document(PageSize.A4)) 
      { 
       var pdfWriter = PdfWriter.GetInstance(pdfDoc, new FileStream("Test.pdf", FileMode.Create)); 
       pdfDoc.Open(); 

       var table1 = new PdfPTable(3); 
       table1.HeaderRows = 2; 
       table1.FooterRows = 1; 

       //header row 
       var headerCell = new PdfPCell(new Phrase("header")); 
       headerCell.Colspan = 3; 
       headerCell.HorizontalAlignment = Element.ALIGN_CENTER; 
       table1.AddCell(headerCell); 

       //footer row 
       var footerCell = new PdfPCell(new Phrase("footer")); 
       footerCell.Colspan = 3; 
       footerCell.HorizontalAlignment = Element.ALIGN_CENTER; 
       table1.AddCell(footerCell); 

       //adding some rows 
       for (int i = 0; i < 70; i++) 
       { 
        //adds a new row 
        table1.AddCell(new Phrase("Cell[0], Row[" + i + "]")); 
        table1.AddCell(new Phrase("Cell[1], Row[" + i + "]")); 
        table1.AddCell(new Phrase("Cell[2], Row[" + i + "]")); 

        //sets the number of rows per page 
        if (i > 0 && table1.Rows.Count % 7 == 0) 
        { 
         pdfDoc.Add(table1); 
         table1.DeleteBodyRows(); 
         pdfDoc.NewPage(); 
        } 
       } 

       pdfDoc.Add(table1); 
      } 

      //open the final file with adobe reader for instance. 
      Process.Start("Test.pdf"); 
     } 
    } 
} 
2

在最新版本的iTextSharp的的(5.3.3),加入新的功能,允許你定義的斷點:SetBreakPoints(int[] breakPoints) 如果定義的10的倍數的數組,你可以用它來獲得預期的效果。

如果您有較舊的版本,您應該遍歷列表併爲每10個對象創建一個新的PdfPTable。請注意,如果您想要將應用程序的內存使用量保持在較低水平,則這是更好的解決方案。

+0

是的。第二個選項對我來說工作正常...這工作正常,但我表只涵蓋了一半的PDF頁面另一半仍然是空白的,我想表10行將覆蓋整個PDF頁..如何做到..? – SST

+0

我不確定你的意思。有一種方法可以擴展最後一行,但是最後一行會有很多空白。還有一種設置固定行高的方法,但如果內容比行高更多,則不適合的內容將會丟失。最後,有一種方法可以設置最小高度(可以使用頁面高度/ 10),但是如果有更多內容,則該行將超過最小高度,並且表格將被拆分並分佈在兩頁上。對你的需求的描述對於人們能夠回答是不夠的。 –