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