Blog

 
1:   using System;
2:   using System.IO;
3:  
4:   using iTextSharp.text;
5:   using iTextSharp.text.pdf;
6:  
7:   namespace iTextSharp.tutorial.Chap12
8:   {
9:       class MyTableEventColspan:  IPdfPTableEvent 
10:       {
11:           public void TableLayout(PdfPTable table, float[][] width, float[] heights, int headerRows, int rowStart, PdfContentByte[] canvases) 
12:           {
13:               float[] widths = width[0];
14:                   PdfContentByte cb = canvases[PdfPTable.TEXTCANVAS];
15:               cb.SaveState();
16:               cb.SetLineWidth(2);
17:               cb.SetRGBColorStroke(255, 0, 0);
18:               
19:               cb.Rectangle(widths[0], heights[heights.Length - 1], widths[widths.Length - 1] - widths[0], heights[0] - heights[heights.Length - 1]);
20:               cb.Stroke();
21:               if (headerRows > 0) 
22:               {
23:                   float headerHeight = heights[0];
24:                   for (int k = 0; k < headerRows; ++k)
25:                       headerHeight += heights[k];
26:                   cb.SetRGBColorStroke(0, 0, 255);
27:                   cb.Rectangle(widths[0], heights[headerRows], widths[widths.Length - 1] - widths[0], heights[0] - heights[headerRows]);
28:                   cb.Stroke();
29:               }
30:               cb.RestoreState();
31:               cb = canvases[PdfPTable.BASECANVAS];
32:               cb.SaveState();
33:               cb.SetLineWidth(.5f);
34:               Random r = new Random();
35:               for (int line = 0; line < heights.Length - 1; ++line) 
36:               {
37:                   widths = width[line];
38:                   for (int col = 0; col < widths.Length - 1; ++col) 
39:                   {
40:                       if (line == 0 && col == 0)
41:                           cb.SetAction(new PdfAction("http://www.Geocities.Com/itextpdf"),
42:                               widths[col], heights[line + 1], widths[col + 1], heights[line]);
43:                       cb.SetRGBColorStrokeF((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble());
44:                       cb.MoveTo(widths[col], heights[line]);
45:                       cb.LineTo(widths[col + 1], heights[line]);
46:                       cb.Stroke();
47:                       cb.SetRGBColorStrokeF((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble());
48:                       cb.MoveTo(widths[col], heights[line]);
49:                       cb.LineTo(widths[col], heights[line + 1]);
50:                       cb.Stroke();
51:                   }
52:               }
53:               cb.RestoreState();
54:           }
55:       }
56:  
57:       public class Chap1203
58:       {
59:           public Chap1203()
60:           {
61:           Console.WriteLine("Chapter 12 example 3: Table events with rowspan");
62:           
63:           // step 1: creation of a document-object
64:           Document document = new Document(PageSize.A4, 50, 50, 50, 50);
65:           try {
66:               // step 2: we create a writer that listens to the document
67:               PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("Chap1203.pdf", FileMode.Create));
68:               // step 3: we open the document
69:               document.Open();
70:               // step 4: we add some content
71:               BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);
72:               // table 1
73:               PdfPTable table = new PdfPTable(4);
74:               
75:               table.DefaultCell.Border=(Rectangle.NO_BORDER);
76:               for (int k = 0; k < 24; ++k) {
77:                   if (k != 0)
78:                       table.AddCell("" + k);
79:                   else {
80:                       table.DefaultCell.Colspan=(3);
81:                       table.DefaultCell.HorizontalAlignment=(Element.ALIGN_CENTER);
82:                       table.AddCell("This is a very big URL");
83:                       table.DefaultCell.Colspan=(1);
84:                       table.DefaultCell.HorizontalAlignment=(Element.ALIGN_LEFT);
85:                       k += 2;
86:                   }
87:               }
88:               MyTableEventColspan evnt = new MyTableEventColspan();
89:               table.TableEvent=(evnt);
90:               table.TotalWidth=(300);
91:               // write table 1 at some position
92:               table.WriteSelectedRows(0, -1, 100, 600, writer.DirectContent);
93:               // add table 1 (default position)
94:               document.Add(table);
95:               document.NewPage();
96:               // table 2
97:               table = new PdfPTable(4);
98:               float fontSize = 12;
99:               table.DefaultCell.PaddingTop=(bf.GetFontDescriptor(BaseFont.ASCENT, fontSize) - fontSize + 2);
100:               table.DefaultCell.Border=(Rectangle.NO_BORDER);
101:               for (int k = 0; k < 500 * 4; ++k) {
102:                   if (k == 0) {
103:                       table.DefaultCell.Colspan=(4);
104:                       table.DefaultCell.HorizontalAlignment=(Element.ALIGN_CENTER);
105:                       table.AddCell(new Phrase("This is an URL", new Font(bf, fontSize * 2)));
106:                       table.DefaultCell.Colspan=(1);
107:                       table.DefaultCell.HorizontalAlignment=(Element.ALIGN_LEFT);
108:                       k += 3;
109:                   }
110:                   else
111:                       table.AddCell(new Phrase("" + k, new Font(bf, fontSize)));
112:               }
113:               table.TableEvent=(evnt);
114:               table.HeaderRows=(3);
115:               document.Add(table);
116:           }
117:           catch (Exception de) {
118:               Console.Error.WriteLine(de.Message);
119:           }
120:           // step 5: close the document
121:           document.Close();
122:           }
123:       }
124:   }