2010-10-06 7 views
0

J'ai recherché comment fusionner deux cellules et j'ai trouvé deux réponses Rowspan et Nested. Je ne peux pas faire ma table avec ces deux fonctions parce que je ne sais pas comment fusionner les cellules au début et à la fin. J'ai essayé plusieurs façons, mais cela me rend fou.Rowspan ou imbriqué? Créer une table itextsharp

La table que je veux faire a 9 colonnes et 3 lignes. Donc, je veux que la table ressemble à:

 
| 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.

L'en-tête 3 contient H1, H2, H3, H4, H5. Je pense que la solution est assez facile, mais je ne peux pas le trouver. J'espère que vous pouvez comprendre quel est le problème parce que je ne peux pas télécharger d'images pour le moment.

+0

Peut-être que vous pourriez essayer de formater votre question (voir l'icône du code lorsque vous écrivez du texte) pour mettre en forme un peu mieux la table. Votre texte est difficile à comprendre. – Paddy

Répondre

3

Il existe plusieurs façons de faire ce que vous voulez faire. Comme la structure de votre table n'est pas trop complexe, l'approche la plus simple consiste à créer votre PdfPTable avec neuf colonnes et à ajouter vos cellules une à la fois en utilisant les propriétés Rowspan et Colspan de chaque cellule lorsque vous créez des lignes.

Le code ci-dessous crée une table dressée exactement comme vous l'avez:

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; 
    } 

Comme vous pouvez le voir, je l'ai Enveloppez la construction de PdfPCells dans les méthodes d'aide qui vous permettent de définir le contenu du texte de chaque cellule et Propriétés Rowspan et Colspan.

Si vous ne l'avez pas déjà fait, je vous suggère de vérifier ce tutoriel sur les tables iTextSharp:

iTextSharp - Introducing Tables

0

rowspan est pas une réponse, parce qu'il n'y a pas rowspan dans iTextSharp. Vous devez utiliser des tables imbriquées. Colspan est posible mais pas rangées.

Pour votre table, j'utiliser une seule et colspan utiliser des cellules vides entre en-tête 1 et D1

+2

"_Rowspan n'est pas une réponse _" ??? Rowspan ** a été [supporté depuis V 2.1.6] (http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfPCell.html). Voir la méthode 'setRowspan()' dans la documentation de l'API. Ou regardez le code source 'iTextSharp'. – kuujinbo

2

Robert (ci-dessous) est juste! Rowspan n'est pas pris en charge dans les dernières versions d'iTextSharp. Seul colspan est supporté. L'URL fournie ci-dessus indique qu'elle a été prise en charge depuis la version 2.1.6, mais il semble que cela n'ait pas été mis à jour depuis un moment car il n'y a plus de méthode setRowSpan() dans aucune des nouvelles versions (ci-dessus v5) et Le paramètre de propriété RowSpan est simplement ignoré.

Il est préférable d'ajouter des cellules vides pour les cellules à lignes espacées.