2013-01-31 86 views
0

我使用iTextSharp 5.3.5在asp.net c#中從我的DataTable生成PDF。我的數據表中包含未知的行,SP而如果需要超過一個頁面的PDF生成我需要修復一些頁眉和頁腳爲每個頁面如何爲所有頁面設置頁眉/頁腳修復高度和文本使用iTextSharp創建PDF

代碼

public DataTable dataTable; 
protected void Page_Load(object sender, EventArgs e) 
{ 
     dataTable = getData(); 
     Document document = new Document(PageSize.A4, 10, 10, 90, 10); 
     string path = Server.MapPath("PDFs"); 
     PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(path + "/Doc103.pdf", FileMode.Create)); 
     document.Open(); 
     CreatePages(document); 
     document.Close(); 
} 

private void CreatePages(Document document) 
    { 
     document.NewPage(); 
     document.Add(FormatPageHeaderPhrase(dataTable.TableName)); 
     PdfPTable pdfTable = new PdfPTable(dataTable.Columns.Count); 
     pdfTable.DefaultCell.Padding = 3; 
     pdfTable.WidthPercentage = 100; // percentage 
     pdfTable.DefaultCell.BorderWidth = 2; 
     pdfTable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER; 

     foreach (DataColumn column in dataTable.Columns) 
     { 
      pdfTable.AddCell(column.ColumnName); 
     } 
     pdfTable.HeaderRows = 1; 
     pdfTable.DefaultCell.BorderWidth = 1; 

     foreach (DataRow row in dataTable.Rows) 
     { 
      foreach (object cell in row.ItemArray) 
      { 
       pdfTable.AddCell(cell.ToString()); 
      } 
     } 

     document.Add(pdfTable); 
    } 

    private static Phrase FormatPageHeaderPhrase(string value) 
     { 
      return new Phrase(value, FontFactory.GetFont(FontFactory.TIMES, 10, Font.BOLD, new BaseColor(255, 0, 0))); 
     } 

Screenshoot PDF的:

enter image description here

回答

1

有不同的方法來解決這個問題。

其中之一是通過使用頁面事件。您創建實現OnEndPage()方法的頁面事件。如果writer.PageNumber > 1,您可以添加標題,比如像這樣:

ColumnText.ShowTextAligned(writer.DirectContent, 
    Element.ALIGN_RIGHT, "Continued from previous page", 36, 820, 0); 

請參閱從chapter 5例子有關頁面事件的詳細信息。

解決這個問題的另一種方法是引入一個表頭:table.HeaderRows = 1;,這樣重複第一行(確保該行包含一個跨所有列的單元格,表示「接上一頁」)。爲避免此標題出現在第一頁上,請使用table.SkipFirstHeader = true;

+0

感謝您的鏈接 –

相關問題