2013-01-31 43 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

感谢您的链接 –

相关问题