1: | using System; | |
2: | using System.IO; | |
3: | ||
4: | using iTextSharp.text; | |
5: | using iTextSharp.text.pdf; | |
6: | ||
7: | namespace iTextSharp.tutorial.Chap10 | |
8: | { | |
9: | public class Chap1015 | |
10: | { | |
11: | ||
12: | public Chap1015() | |
13: | { | |
14: | ||
15: | Console.WriteLine("Chapter 10 Example 15: Tiled Patterns"); | |
16: | ||
17: | // step 1: creation of a document-object | |
18: | Document document = new Document(); | |
19: | ||
20: | try | |
21: | { | |
22: | ||
23: | // step 2: | |
24: | // we create a writer that listens to the document | |
25: | // and directs a PDF-stream to a file | |
26: | PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("Chap1015.pdf", FileMode.Create)); | |
27: | ||
28: | // step 3: we open the document | |
29: | document.Open(); | |
30: | ||
31: | // step 4: we grab the ContentByte and do some stuff with it | |
32: | PdfContentByte cb = writer.DirectContent; | |
33: | ||
34: | BaseFont bf = BaseFont.CreateFont("Times-Roman", "winansi", false); | |
35: | ||
36: | // step 5: we create some PdfPatternPainter instances for drawing path, text, or placing image | |
37: | ||
38: | // Image instance to be placed in PdfPatternPainter canvas. Any nice one? | |
39: | Image img = Image.GetInstance("pngnow.png"); | |
40: | ||
41: | PdfPatternPainter p = cb.CreatePattern(60f, 60f, 60f, 60f); | |
42: | PdfPatternPainter p1 = cb.CreatePattern(60f, 60f, 60f, 60f); | |
43: | PdfPatternPainter p2 = cb.CreatePattern(img.ScaledWidth, img.ScaledHeight, img.ScaledWidth, img.ScaledHeight); | |
44: | ||
45: | ||
46: | // step 6: put your drawing instruction in the painter canvas | |
47: | ||
48: | // A star pattern taken from Adobe PDF Reference Book p.207 | |
49: | String star = "0.3 g\n15.000 27.000 m\n" | |
50: | + "7.947 5.292 l\n26.413 18.708 l\n" | |
51: | + "3.587 18.708 l\n22.053 5.292 l\nf\n" | |
52: | + "45.000 57.000 m\n37.947 35.292 l\n" | |
53: | + "56.413 48.708 l\n33.587 48.708 l\n" | |
54: | + "52.053 35.292 l\nf\n" | |
55: | + "0.7 g\n15.000 57.000 m\n" | |
56: | + "7.947 35.292 l\n26.413 48.708 l\n" | |
57: | + "3.587 48.708 l\n22.053 35.292 l\nf\n" | |
58: | + "45.000 27.000 m\n37.947 5.292 l\n" | |
59: | + "56.413 18.708 l\n33.587 18.708 l\n" | |
60: | + "52.053 5.292 l\nf"; | |
61: | ||
62: | p.SetLiteral(star); | |
63: | ||
64: | // A Pattern with some text drawing | |
65: | p1.SetGrayFill(0.3f); | |
66: | p1.SetFontAndSize(bf, 12); | |
67: | p1.BeginText(); | |
68: | p1.SetTextMatrix(1f, 0f, 0f, 1f, 0f, 0f); | |
69: | p1.ShowText("A B C D"); | |
70: | p1.EndText(); | |
71: | p1.MoveTo(0f, 0f); | |
72: | p1.LineTo(60f, 60f); | |
73: | p1.Stroke(); | |
74: | ||
75: | // A pattern with an image and position | |
76: | p2.AddImage(img, img.ScaledWidth, 0f, 0f, img.ScaledHeight, 0f, 0f); | |
77: | p2.SetPatternMatrix(1f, 0f, 0f, 1f, 60f, 60f); | |
78: | ||
79: | // See if we can apply the pattern color to chunk, phrase or paragraph | |
80: | PatternColor pat = new PatternColor(p); | |
81: | PatternColor pat1 = new PatternColor(p1); | |
82: | PatternColor pat2 = new PatternColor(p2); | |
83: | String text = "Text with pattern"; | |
84: | document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, new GrayColor(0.3f)))); | |
85: | document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, pat))); | |
86: | ||
87: | // draw a rectangle filled with star pattern | |
88: | cb.SetPatternFill(p); | |
89: | cb.SetGrayStroke(0.0f); | |
90: | cb.Rectangle(20, 20, 284, 120); | |
91: | cb.FillStroke(); | |
92: | ||
93: | // draw some characters filled with star. | |
94: | // Note: A gray, rgb, cmyk or spot color should be applied first | |
95: | // otherwise, you will not be able to see the character glyph | |
96: | // since the glyph path is filled by pattern | |
97: | cb.BeginText(); | |
98: | cb.SetFontAndSize(bf, 1); | |
99: | cb.SetTextMatrix(270f, 0f, 0f, 270f, 20f, 100f); | |
100: | cb.SetGrayFill(0.9f); | |
101: | cb.ShowText("ABC"); | |
102: | cb.SetPatternFill(p); | |
103: | cb.MoveTextWithLeading(0.0f, 0.0f); | |
104: | cb.ShowText("ABC"); | |
105: | cb.EndText(); | |
106: | cb.SetPatternFill(p); | |
107: | ||
108: | // draw a circle. Similar to rectangle | |
109: | cb.SetGrayStroke(0.0f); | |
110: | cb.Circle(150f, 400f, 150f); | |
111: | cb.FillStroke(); | |
112: | ||
113: | // New Page to draw text in the pattern painter's canvas | |
114: | document.NewPage(); | |
115: | ||
116: | document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, new GrayColor(0.3f)))); | |
117: | document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, pat1))); | |
118: | // draw a rectangle | |
119: | cb.SetPatternFill(p1); | |
120: | cb.SetGrayStroke(0.0f); | |
121: | cb.Rectangle(0, 0, 284, 120); | |
122: | cb.FillStroke(); | |
123: | ||
124: | // draw some characters | |
125: | cb.BeginText(); | |
126: | cb.SetFontAndSize(bf, 1); | |
127: | cb.SetTextMatrix(270f, 0f, 0f, 270f, 20f, 100f); | |
128: | cb.SetGrayFill(0.9f); | |
129: | cb.ShowText("ABC"); | |
130: | cb.SetPatternFill(p1); | |
131: | cb.MoveTextWithLeading(0.0f, 0.0f); | |
132: | cb.ShowText("ABC"); | |
133: | cb.EndText(); | |
134: | ||
135: | // draw a circle | |
136: | cb.SetPatternFill(p1); | |
137: | cb.SetGrayStroke(0.0f); | |
138: | cb.Circle(150f, 400f, 150f); | |
139: | cb.FillStroke(); | |
140: | ||
141: | // New page to place image in the pattern painter's canvas | |
142: | document.NewPage(); | |
143: | document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, new GrayColor(0.3f)))); | |
144: | document.Add(new Paragraph(text, FontFactory.GetFont(FontFactory.HELVETICA, 60, Font.BOLD, pat2))); | |
145: | // The original Image for comparison reason. | |
146: | // Note: The width and height is the same as bbox in pattern | |
147: | cb.AddImage(img, img.ScaledWidth, 0f, 0f, img.ScaledHeight, 350f, 400f); | |
148: | ||
149: | // draw a rectangle | |
150: | cb.SetPatternFill(p2); | |
151: | cb.SetGrayStroke(0.0f); | |
152: | cb.Rectangle(60, 60, 300, 120); | |
153: | cb.FillStroke(); | |
154: | ||
155: | // draw some characters. | |
156: | // Note: if the image fills up the pattern, there's no need to draw text twice | |
157: | // since colors in image will be clipped to character glyph path | |
158: | cb.BeginText(); | |
159: | cb.SetFontAndSize(bf, 1); | |
160: | cb.SetTextMatrix(270f, 0f, 0f, 270f, 60f, 120f); | |
161: | cb.SetPatternFill(p2); | |
162: | cb.ShowText("ABC"); | |
163: | cb.EndText(); | |
164: | ||
165: | // draw a circle | |
166: | cb.SetPatternFill(p2); | |
167: | cb.SetGrayStroke(0.0f); | |
168: | cb.Circle(150f, 400f, 150f); | |
169: | cb.FillStroke(); | |
170: | } | |
171: | catch(Exception e) | |
172: | { | |
173: | Console.Error.WriteLine(e.Message); | |
174: | Console.Error.WriteLine(e.StackTrace); | |
175: | } | |
176: | ||
177: | // finally, we close the document | |
178: | document.Close(); | |
179: | } | |
180: | } | |
181: | } |