2010-10-06 62 views
0

我一直在尋找如何合併兩個單元格,我發現了兩個答案Rowspan和Nested。我不能使用這兩個函數創建我的表格,因爲我不知道如何在開始和結束時合併單元格。我一直在嘗試很多方法,但這讓我瘋狂。行距或嵌套?創建一個表itextsharp

我想要的表格有9列3行。所以,我希望表格看起來像:

 
| Header 1 | Header 2 |  Header 3   | Header 4 | Header 5 | 
|   |   | H1 | H2 | H3 | H4 | H5 |   |   | 
| D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | 

Header 1: cs=1, rs=2. 
Header 2: cs=1, rs=2. 
Header 3: cs=5, rs=1. 
     H1: cs=1, rs=1. 
     H2: cs=1, rs=1. 
     H3: cs=1, rs=1. 
     H4: cs=1, rs=1. 
     H5: cs=1, rs=1. 
Header 4: cs=1, rs=2. 
Header 5: cs=1, rs=2. 

cs:colspan,rs:rowspan。

標題3包含H1,H2,H3,H4,H5。

我認爲這個解決方案很簡單,但是我找不到它。我希望你能理解哪個問題是因爲我還不能上傳圖片。

+0

也許你可以嘗試格式化你的問題(當你寫文本的時候看到代碼圖標)來更好地佈局表格。你的文字很難理解。 – Paddy 2010-10-06 11:47:31

回答

3

有幾種方法可以做你想做的事情。既然你的表結構不是太複雜,也許最簡單的方法是創建帶有九列的PdfPTable,並在創建行時使用每個單元格的Rowspan和Colspan屬性一次添加一個單元格。

下面的代碼將創建一個表佈局完全按照您的描述:

private void CreatePdf() { 
     using (FileStream fs = new FileStream("TableTest.pdf", FileMode.Create)) { 

      Document doc = new Document(new iTextSharp.text.Rectangle(800f, 800f)); 
      PdfWriter.GetInstance(doc, fs); 
      doc.Open(); 

      PdfPTable table = new PdfPTable(9); 

      // Hdeaer row. 
      table.AddCell(GetCell("Header 1", 1, 2)); 
      table.AddCell(GetCell("Header 2", 1, 2)); 
      table.AddCell(GetCell("Header 3", 5, 1)); 
      table.AddCell(GetCell("Header 4", 1, 2)); 
      table.AddCell(GetCell("Header 5", 1, 2)); 

      // Inner middle row. 
      table.AddCell(GetCell("H1")); 
      table.AddCell(GetCell("H2")); 
      table.AddCell(GetCell("H3")); 
      table.AddCell(GetCell("H4")); 
      table.AddCell(GetCell("H5")); 

      // Bottom row. 
      table.AddCell(GetCell("D1")); 
      table.AddCell(GetCell("D2")); 
      table.AddCell(GetCell("D3")); 
      table.AddCell(GetCell("D4")); 
      table.AddCell(GetCell("D5")); 
      table.AddCell(GetCell("D6")); 
      table.AddCell(GetCell("D7")); 
      table.AddCell(GetCell("D8")); 
      table.AddCell(GetCell("D9")); 

      doc.Add(table); 
      doc.Close(); 
     } 
    } 
    private PdfPCell GetCell(string text) { 
     return GetCell(text, 1, 1); 
    } 
    private PdfPCell GetCell(string text, int colSpan, int rowSpan) { 
     PdfPCell cell = new PdfPCell(new Phrase(text)); 
     cell.HorizontalAlignment = 1; 
     cell.Rowspan = rowSpan; 
     cell.Colspan = colSpan; 

     return cell; 
    } 

正如你可以看到我已經包裹PdfPCells的輔助方法,使您可以設置每個單元格的文本內容和建設Rowspan和Colspan屬性。

如果您還沒有這樣做的話,我建議你看看這個教程iTextSharp的表:

iTextSharp - Introducing Tables

0

行跨度是不是一個答案,因爲在沒有iTextSharp的rowspan的。你必須使用嵌套表格。

Colspan是posible而不是rowspan。

對於你的表,我只會用一個合併單元格,並使用標題1和D1

+2

「_Rowspan不是答案_」? Rowspan **自[V 2.1.6開始]以來一直支持(http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfPCell.html)。請參閱API文檔中的'setRowspan()'方法。或者查看「iTextSharp」源代碼。 – kuujinbo 2011-12-01 10:06:19

2

之間的空單元格羅伯特(下圖)是正確的!最新版本的iTextSharp不支持Rowspan。只有colspan被支持。上面提供的URL確實表明它自從2.1.6版本以來一直受到支持,但是看起來好像沒有更新過,因爲在任何新版本(v5以上)中都沒有setRowSpan()方法,而且RowSpan屬性設置被忽略。

你最好爲跨越行的單元格添加一個空單元格。