public void Arc(Vector1D x1, Vector1D y1, Vector1D x2, Vector1D y2, float startAngle, float extentAngle) { cb.Arc( (float)x1.Value(UnitsOfMeasure.Points), (float)y1.Value(UnitsOfMeasure.Points), (float)x2.Value(UnitsOfMeasure.Points), (float)y2.Value(UnitsOfMeasure.Points), startAngle, extentAngle); }
// =========================================================================== public void Write(Stream stream) { // step 1 using (Document document = new Document()) { // step 2 PdfWriter writer = PdfWriter.GetInstance(document, stream); // step 3 document.Open(); // step 4 PdfContentByte canvas = writer.DirectContent; // draw squares CreateSquares(canvas, 50, 720, 80, 20); ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase( "Methods MoveTo(), LineTo(), stroke(), closePathStroke(), Fill(), and closePathFill()" ), 50, 700, 0 ); // draw Bezier curves createBezierCurves(canvas, 70, 600, 80, 670, 140, 690, 160, 630, 160); ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase("Different CurveTo() methods, followed by stroke()"), 50, 580, 0 ); // draw stars and circles CreateStarsAndCircles(canvas, 50, 470, 40, 20); ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase( "Methods Fill(), eoFill(), NewPath(), FillStroke(), and EoFillStroke()" ), 50, 450, 0 ); // draw different shapes using convenience methods canvas.SaveState(); canvas.SetColorStroke(new GrayColor(0.2f)); canvas.SetColorFill(new GrayColor(0.9f)); canvas.Arc(50, 270, 150, 330, 45, 270); canvas.Ellipse(170, 270, 270, 330); canvas.Circle(320, 300, 30); canvas.RoundRectangle(370, 270, 80, 60, 20); canvas.FillStroke(); canvas.RestoreState(); Rectangle rect = new Rectangle(470, 270, 550, 330); rect.BorderWidthBottom = 10; rect.BorderColorBottom = new GrayColor(0f); rect.BorderWidthLeft = 4; rect.BorderColorLeft = new GrayColor(0.9f); rect.BackgroundColor = new GrayColor(0.4f); canvas.Rectangle(rect); ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase("Convenience methods"), 50, 250, 0 ); } }
public static void Pizza(PdfContentByte cb, ArrayList valores, ArrayList labels, float xCentro, float yCentro, float raio) { float h = PageSize.LETTER.Width; // paisagem float w = PageSize.LETTER.Height; cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.COURIER, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 10); float total = 0; foreach (float valor in valores) { total += valor; } int[,] cores = new int[, ] { { 255, 0, 0 }, { 0, 255, 0 }, { 0, 0, 255 }, { 255, 255, 0 }, { 255, 0, 255 }, { 0, 255, 255 }, { 255, 128, 0 }, { 0, 255, 128 }, { 128, 0, 255 }, { 255, 128, 128 }, { 128, 255, 128 }, { 128, 128, 255 } }; int i = 0; float _dx = 0; float _dy = 0; float _a = 0; foreach (float valor in valores) { float a = valor * 360 / total; double coseno = System.Math.Cos((a + _a) * System.Math.PI / 180); double seno = System.Math.Sin((a + _a) * System.Math.PI / 180); float dx = (float)(raio * coseno); float dy = (float)(raio * seno); if (valor != 0) { cb.SetRGBColorFill(cores[i, 0], cores[i, 1], cores[i, 2]); cb.MoveTo(xCentro, h - yCentro); cb.LineTo(xCentro + _dx, h - yCentro + _dy); cb.Arc(xCentro - raio, h - yCentro + raio, xCentro + raio, h - yCentro - raio, _a, a); cb.LineTo(xCentro, h - yCentro); cb.FillStroke(); } _dx = dx; _dy = dy; _a += a; Legenda(cb, i, valor, labels[i].ToString(), cores, xCentro, yCentro, raio); i++; } }
public override void DrawArc(LT lineType, Vector2D ptCenter, double radius, double angleBeg, double angleEnd) { _cb.SetLineWidth(0.0f); _cb.SetColorStroke(LineTypeToBaseColor(lineType)); _cb.Arc( DX(ptCenter.X - radius), DY(ptCenter.Y - radius) // Bottom Left(x,y) , DX(ptCenter.X + radius), DY(ptCenter.Y + radius) // Top Right(x,y) , -(float)angleBeg // Start Angle , -(float)(angleEnd - angleBeg) // Extent ); _cb.Stroke(); }
private void DrawArc(PdfContentByte cb, IList <float> numbers) { EllipseArc ellipse = EllipseArc.CreateEllipseArc(numbers[7], numbers[8], numbers[5], numbers[6], numbers[0], numbers[1], numbers[4], numbers[3]); cb.SetColorFill(BaseColor.ORANGE); cb.Rectangle(numbers[7], numbers[8], 2, 2); //p1 cb.Fill(); cb.SetColorFill(BaseColor.GREEN); cb.Rectangle(numbers[5], numbers[6], 2, 2); //p2 cb.Fill(); cb.Arc(ellipse.Cx - numbers[0], ellipse.Cy - numbers[1], ellipse.Cx + numbers[0], ellipse.Cy + numbers[1], ellipse.StartAng, ellipse.Extend); }
public void ReadAll() { if (meta.ReadInt() != unchecked ((int)0x9AC6CDD7)) { throw new DocumentException(MessageLocalization.GetComposedMessage("not.a.placeable.windows.metafile")); } meta.ReadWord(); left = meta.ReadShort(); top = meta.ReadShort(); right = meta.ReadShort(); bottom = meta.ReadShort(); inch = meta.ReadWord(); state.ScalingX = (float)(right - left) / (float)inch * 72f; state.ScalingY = (float)(bottom - top) / (float)inch * 72f; state.OffsetWx = left; state.OffsetWy = top; state.ExtentWx = right - left; state.ExtentWy = bottom - top; meta.ReadInt(); meta.ReadWord(); meta.Skip(18); int tsize; int function; cb.SetLineCap(1); cb.SetLineJoin(1); for (;;) { int lenMarker = meta.Length; tsize = meta.ReadInt(); if (tsize < 3) { break; } function = meta.ReadWord(); switch (function) { case 0: break; case META_CREATEPALETTE: case META_CREATEREGION: case META_DIBCREATEPATTERNBRUSH: state.AddMetaObject(new MetaObject()); break; case META_CREATEPENINDIRECT: { MetaPen pen = new MetaPen(); pen.Init(meta); state.AddMetaObject(pen); break; } case META_CREATEBRUSHINDIRECT: { MetaBrush brush = new MetaBrush(); brush.Init(meta); state.AddMetaObject(brush); break; } case META_CREATEFONTINDIRECT: { MetaFont font = new MetaFont(); font.Init(meta); state.AddMetaObject(font); break; } case META_SELECTOBJECT: { int idx = meta.ReadWord(); state.SelectMetaObject(idx, cb); break; } case META_DELETEOBJECT: { int idx = meta.ReadWord(); state.DeleteMetaObject(idx); break; } case META_SAVEDC: state.SaveState(cb); break; case META_RESTOREDC: { int idx = meta.ReadShort(); state.RestoreState(idx, cb); break; } case META_SETWINDOWORG: state.OffsetWy = meta.ReadShort(); state.OffsetWx = meta.ReadShort(); break; case META_SETWINDOWEXT: state.ExtentWy = meta.ReadShort(); state.ExtentWx = meta.ReadShort(); break; case META_MOVETO: { int y = meta.ReadShort(); System.Drawing.Point p = new System.Drawing.Point(meta.ReadShort(), y); state.CurrentPoint = p; break; } case META_LINETO: { int y = meta.ReadShort(); int x = meta.ReadShort(); System.Drawing.Point p = state.CurrentPoint; cb.MoveTo(state.TransformX(p.X), state.TransformY(p.Y)); cb.LineTo(state.TransformX(x), state.TransformY(y)); cb.Stroke(); state.CurrentPoint = new System.Drawing.Point(x, y); break; } case META_POLYLINE: { state.LineJoinPolygon = cb; int len = meta.ReadWord(); int x = meta.ReadShort(); int y = meta.ReadShort(); cb.MoveTo(state.TransformX(x), state.TransformY(y)); for (int k = 1; k < len; ++k) { x = meta.ReadShort(); y = meta.ReadShort(); cb.LineTo(state.TransformX(x), state.TransformY(y)); } cb.Stroke(); break; } case META_POLYGON: { if (IsNullStrokeFill(false)) { break; } int len = meta.ReadWord(); int sx = meta.ReadShort(); int sy = meta.ReadShort(); cb.MoveTo(state.TransformX(sx), state.TransformY(sy)); for (int k = 1; k < len; ++k) { int x = meta.ReadShort(); int y = meta.ReadShort(); cb.LineTo(state.TransformX(x), state.TransformY(y)); } cb.LineTo(state.TransformX(sx), state.TransformY(sy)); StrokeAndFill(); break; } case META_POLYPOLYGON: { if (IsNullStrokeFill(false)) { break; } int numPoly = meta.ReadWord(); int[] lens = new int[numPoly]; for (int k = 0; k < lens.Length; ++k) { lens[k] = meta.ReadWord(); } for (int j = 0; j < lens.Length; ++j) { int len = lens[j]; int sx = meta.ReadShort(); int sy = meta.ReadShort(); cb.MoveTo(state.TransformX(sx), state.TransformY(sy)); for (int k = 1; k < len; ++k) { int x = meta.ReadShort(); int y = meta.ReadShort(); cb.LineTo(state.TransformX(x), state.TransformY(y)); } cb.LineTo(state.TransformX(sx), state.TransformY(sy)); } StrokeAndFill(); break; } case META_ELLIPSE: { if (IsNullStrokeFill(state.LineNeutral)) { break; } int b = meta.ReadShort(); int r = meta.ReadShort(); int t = meta.ReadShort(); int l = meta.ReadShort(); cb.Arc(state.TransformX(l), state.TransformY(b), state.TransformX(r), state.TransformY(t), 0, 360); StrokeAndFill(); break; } case META_ARC: { if (IsNullStrokeFill(state.LineNeutral)) { break; } float yend = state.TransformY(meta.ReadShort()); float xend = state.TransformX(meta.ReadShort()); float ystart = state.TransformY(meta.ReadShort()); float xstart = state.TransformX(meta.ReadShort()); float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); float cx = (r + l) / 2; float cy = (t + b) / 2; float arc1 = GetArc(cx, cy, xstart, ystart); float arc2 = GetArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) { arc2 += 360; } cb.Arc(l, b, r, t, arc1, arc2); cb.Stroke(); break; } case META_PIE: { if (IsNullStrokeFill(state.LineNeutral)) { break; } float yend = state.TransformY(meta.ReadShort()); float xend = state.TransformX(meta.ReadShort()); float ystart = state.TransformY(meta.ReadShort()); float xstart = state.TransformX(meta.ReadShort()); float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); float cx = (r + l) / 2; float cy = (t + b) / 2; float arc1 = GetArc(cx, cy, xstart, ystart); float arc2 = GetArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) { arc2 += 360; } List <float[]> ar = PdfContentByte.BezierArc(l, b, r, t, arc1, arc2); if (ar.Count == 0) { break; } float[] pt = ar[0]; cb.MoveTo(cx, cy); cb.LineTo(pt[0], pt[1]); for (int k = 0; k < ar.Count; ++k) { pt = ar[k]; cb.CurveTo(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]); } cb.LineTo(cx, cy); StrokeAndFill(); break; } case META_CHORD: { if (IsNullStrokeFill(state.LineNeutral)) { break; } float yend = state.TransformY(meta.ReadShort()); float xend = state.TransformX(meta.ReadShort()); float ystart = state.TransformY(meta.ReadShort()); float xstart = state.TransformX(meta.ReadShort()); float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); float cx = (r + l) / 2; float cy = (t + b) / 2; float arc1 = GetArc(cx, cy, xstart, ystart); float arc2 = GetArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) { arc2 += 360; } List <float[]> ar = PdfContentByte.BezierArc(l, b, r, t, arc1, arc2); if (ar.Count == 0) { break; } float[] pt = ar[0]; cx = pt[0]; cy = pt[1]; cb.MoveTo(cx, cy); for (int k = 0; k < ar.Count; ++k) { pt = ar[k]; cb.CurveTo(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]); } cb.LineTo(cx, cy); StrokeAndFill(); break; } case META_RECTANGLE: { if (IsNullStrokeFill(true)) { break; } float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); cb.Rectangle(l, b, r - l, t - b); StrokeAndFill(); break; } case META_ROUNDRECT: { if (IsNullStrokeFill(true)) { break; } float h = state.TransformY(0) - state.TransformY(meta.ReadShort()); float w = state.TransformX(meta.ReadShort()) - state.TransformX(0); float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); cb.RoundRectangle(l, b, r - l, t - b, (h + w) / 4); StrokeAndFill(); break; } case META_INTERSECTCLIPRECT: { float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); cb.Rectangle(l, b, r - l, t - b); cb.EoClip(); cb.NewPath(); break; } case META_EXTTEXTOUT: { int y = meta.ReadShort(); int x = meta.ReadShort(); int count = meta.ReadWord(); int flag = meta.ReadWord(); int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; if ((flag & (MetaFont.ETO_CLIPPED | MetaFont.ETO_OPAQUE)) != 0) { x1 = meta.ReadShort(); y1 = meta.ReadShort(); x2 = meta.ReadShort(); y2 = meta.ReadShort(); } byte[] text = new byte[count]; int k; for (k = 0; k < count; ++k) { byte c = (byte)meta.ReadByte(); if (c == 0) { break; } text[k] = c; } string s; try { s = System.Text.Encoding.GetEncoding(1252).GetString(text, 0, k); } catch { s = System.Text.ASCIIEncoding.ASCII.GetString(text, 0, k); } OutputText(x, y, flag, x1, y1, x2, y2, s); break; } case META_TEXTOUT: { int count = meta.ReadWord(); byte[] text = new byte[count]; int k; for (k = 0; k < count; ++k) { byte c = (byte)meta.ReadByte(); if (c == 0) { break; } text[k] = c; } string s; try { s = System.Text.Encoding.GetEncoding(1252).GetString(text, 0, k); } catch { s = System.Text.ASCIIEncoding.ASCII.GetString(text, 0, k); } count = (count + 1) & 0xfffe; meta.Skip(count - k); int y = meta.ReadShort(); int x = meta.ReadShort(); OutputText(x, y, 0, 0, 0, 0, 0, s); break; } case META_SETBKCOLOR: state.CurrentBackgroundColor = meta.ReadColor(); break; case META_SETTEXTCOLOR: state.CurrentTextColor = meta.ReadColor(); break; case META_SETTEXTALIGN: state.TextAlign = meta.ReadWord(); break; case META_SETBKMODE: state.BackgroundMode = meta.ReadWord(); break; case META_SETPOLYFILLMODE: state.PolyFillMode = meta.ReadWord(); break; case META_SETPIXEL: { BaseColor color = meta.ReadColor(); int y = meta.ReadShort(); int x = meta.ReadShort(); cb.SaveState(); cb.SetColorFill(color); cb.Rectangle(state.TransformX(x), state.TransformY(y), .2f, .2f); cb.Fill(); cb.RestoreState(); break; } case META_DIBSTRETCHBLT: case META_STRETCHDIB: { int rop = meta.ReadInt(); if (function == META_STRETCHDIB) { /*int usage = */ meta.ReadWord(); } int srcHeight = meta.ReadShort(); int srcWidth = meta.ReadShort(); int ySrc = meta.ReadShort(); int xSrc = meta.ReadShort(); float destHeight = state.TransformY(meta.ReadShort()) - state.TransformY(0); float destWidth = state.TransformX(meta.ReadShort()) - state.TransformX(0); float yDest = state.TransformY(meta.ReadShort()); float xDest = state.TransformX(meta.ReadShort()); byte[] b = new byte[(tsize * 2) - (meta.Length - lenMarker)]; for (int k = 0; k < b.Length; ++k) { b[k] = (byte)meta.ReadByte(); } try { MemoryStream inb = new MemoryStream(b); Image bmp = BmpImage.GetImage(inb, true, b.Length); cb.SaveState(); cb.Rectangle(xDest, yDest, destWidth, destHeight); cb.Clip(); cb.NewPath(); bmp.ScaleAbsolute(destWidth * bmp.Width / srcWidth, -destHeight * bmp.Height / srcHeight); bmp.SetAbsolutePosition(xDest - destWidth * xSrc / srcWidth, yDest + destHeight * ySrc / srcHeight - bmp.ScaledHeight); cb.AddImage(bmp); cb.RestoreState(); } catch { // empty on purpose } break; } } meta.Skip((tsize * 2) - (meta.Length - lenMarker)); } state.Cleanup(cb); }
public static void DrawPieChart(this PdfContentByte canvas, PieChart chart, float x0, float y0, float r = 50f, Font font = null, bool showCaption = true) { if (chart.Values.Length != chart.Captions.Length) { return; } if (font == null) { font = FontFactory.GetFont(FontFactory.TIMES, 8); } canvas.SetLineWidth(0f); double _x1, _y1, _x2, _y2; float x1, y1, x2, y2; canvas.SetLineWidth(1f); float cRadius = (float)(r + 0.5); canvas.Circle(x0, y0, cRadius); canvas.SetColorStroke(BaseColor.GRAY); canvas.Stroke(); canvas.SetLineWidth(0f); float rectX1 = x0 - r; float rectY1 = y0 - r; float xPoint = x0 + r; float yPoint = y0 + r; //canvas.Rectangle(rectX1, rectY1, 2 * r, 2 * r); //canvas.Stroke(); double _startAngle = 0; double _endAngle = 0; float startAngle = 0; float endAngle = 0; float captionY = y0 + (chart.Values.Length - 1) * 6; double _percentage; string percentage; for (int counter = 0; counter < chart.Values.Length; counter++) { if (chart.TotalValues > 0) { _percentage = chart.Angles[counter] * 100 / 360; } else { _percentage = 0; } if (showCaption) { //captions from here canvas.SetColorStroke(chart.ChartColors[counter]); canvas.SetColorFill(chart.ChartColors[counter]); canvas.Rectangle(x0 + r + 10, captionY, 7, 7); canvas.ClosePathFillStroke(); percentage = string.Format("{0:N}", _percentage); ColumnText text2 = new ColumnText(canvas); Phrase phrase = new Phrase(string.Format("{0} ({1}%)", chart.Captions[counter], percentage), font); text2.SetSimpleColumn(phrase, x0 + r + 20, captionY, x0 + r + 200, captionY, 0f, 0); text2.Go(); captionY -= 12; if (_percentage == 0) { continue; } //end of caption } if (chart.TotalValues <= 0) { continue; } if (_percentage <= 50) { //get coordinate on circle _x1 = x0 + r * Math.Cos(_startAngle * Math.PI / 180); _y1 = y0 + r * Math.Sin(_startAngle * Math.PI / 180); x1 = (float)_x1; y1 = (float)_y1; _endAngle += chart.Angles[counter]; _x2 = x0 + r * Math.Cos(_endAngle * Math.PI / 180); _y2 = y0 + r * Math.Sin(_endAngle * Math.PI / 180); x2 = (float)_x2; y2 = (float)_y2; startAngle = (float)_startAngle; endAngle = (float)_endAngle; //set the colors to be used canvas.SetColorStroke(chart.ChartColors[counter]); canvas.SetColorFill(chart.ChartColors[counter]); //draw the triangle within the circle canvas.MoveTo(x0, y0); canvas.LineTo(x1, y1); canvas.LineTo(x2, y2); canvas.LineTo(x0, y0); canvas.ClosePathFillStroke(); //draw the arc canvas.Arc(rectX1, rectY1, xPoint, yPoint, startAngle, (float)chart.Angles[counter]); canvas.ClosePathFillStroke(); _startAngle += chart.Angles[counter]; } else { //DO THE FIRST PART //get coordinate on circle _x1 = x0 + r * Math.Cos(_startAngle * Math.PI / 180); _y1 = y0 + r * Math.Sin(_startAngle * Math.PI / 180); x1 = (float)_x1; y1 = (float)_y1; _endAngle += 180; _x2 = x0 + r * Math.Cos(_endAngle * Math.PI / 180); _y2 = y0 + r * Math.Sin(_endAngle * Math.PI / 180); x2 = (float)_x2; y2 = (float)_y2; startAngle = (float)_startAngle; endAngle = (float)_endAngle; //set the colors to be used canvas.SetColorStroke(chart.ChartColors[counter]); canvas.SetColorFill(chart.ChartColors[counter]); //draw the triangle within the circle canvas.MoveTo(x0, y0); canvas.LineTo(x1, y1); canvas.LineTo(x2, y2); canvas.LineTo(x0, y0); canvas.ClosePathFillStroke(); //draw the arc canvas.Arc(rectX1, rectY1, xPoint, yPoint, startAngle, 180); canvas.ClosePathFillStroke(); //DO THE SECOND PART //get coordinate on circle _x1 = x0 + r * Math.Cos((_startAngle + 180) * Math.PI / 180); _y1 = y0 + r * Math.Sin((_startAngle + 180) * Math.PI / 180); x1 = (float)_x1; y1 = (float)_y1; _endAngle += chart.Angles[counter] - 180; _x2 = x0 + r * Math.Cos(_endAngle * Math.PI / 180); _y2 = y0 + r * Math.Sin(_endAngle * Math.PI / 180); x2 = (float)_x2; y2 = (float)_y2; startAngle = (float)_startAngle; endAngle = (float)_endAngle; //set the colors to be used canvas.SetColorStroke(chart.ChartColors[counter]); canvas.SetColorFill(chart.ChartColors[counter]); //draw the triangle within the circle canvas.MoveTo(x0, y0); canvas.LineTo(x1, y1); canvas.LineTo(x2, y2); canvas.LineTo(x0, y0); canvas.ClosePathFillStroke(); //draw the arc canvas.Arc(rectX1, rectY1, xPoint, yPoint, startAngle + 180, (float)(chart.Angles[counter] - 180)); canvas.ClosePathFillStroke(); _startAngle += chart.Angles[counter]; } } }
public static void PageShapes(Document pdf, PdfWriter writer) { PdfContentByte cb = writer.DirectContent; // LINES var title = new Paragraph("Lines", new Font(Font.HELVETICA, 20, Font.BOLD + Font.UNDERLINE)); pdf.Add(title); cb.SetLineWidth(5); cb.SetColorStroke(new BaseColor(0, 140, 180)); cb.MoveTo(40f, InverseY(120f)); cb.LineTo(200f, InverseY(120f)); cb.Stroke(); cb.SetColorStroke(new BaseColor(10, 180, 80)); cb.SetLineDash(20f, 10f); cb.MoveTo(40f, InverseY(140f)); cb.LineTo(200f, InverseY(140f)); cb.Stroke(); // Reset cb.SetLineWidth(1); cb.SetLineDash(0); cb.SetColorStroke(new BaseColor(0, 0, 0)); // SHAPES ColumnText ct = new ColumnText(cb); Phrase ctitle = new Phrase("Shapes", new Font(Font.HELVETICA, 20, Font.BOLD + Font.UNDERLINE)); ct.SetSimpleColumn(ctitle, 40f, 0, 580, InverseY(170f), 15, Element.ALIGN_LEFT); //lower-left-x //lower-left-y //upper-right-x(llx + width) //upper-right-y(lly + height) //leading(The amount of blank space between lines of print) ct.Go(); //title = new Paragraph("Shapes", new Font(Font.HELVETICA, 20, Font.BOLD + Font.UNDERLINE)); //pdf.Add(title); cb.Rectangle(40f, InverseY(200f), 120f, -50f); cb.Stroke(); cb.SetColorStroke(BaseColor.Red); cb.Circle(200f, InverseY(230f), 30f); cb.Stroke(); cb.SaveState(); { PdfGState gs = new PdfGState(); gs.FillOpacity = 0.5f; cb.SetGState(gs); cb.SetColorFill(BaseColor.Green); cb.Circle(220f, InverseY(240f), 30f); cb.Fill(); } cb.RestoreState(); cb.SetColorStroke(BaseColor.Blue); cb.Arc(300f, InverseY(220f), 360f, InverseY(280f), 45, 270); cb.Stroke(); // }
public void ReadAll() { if (Meta.ReadInt() != unchecked ((int)0x9AC6CDD7)) { throw new DocumentException("Not a placeable windows metafile"); } Meta.ReadWord(); _left = Meta.ReadShort(); _top = Meta.ReadShort(); _right = Meta.ReadShort(); _bottom = Meta.ReadShort(); _inch = Meta.ReadWord(); _state.ScalingX = (_right - _left) / (float)_inch * 72f; _state.ScalingY = (_bottom - _top) / (float)_inch * 72f; _state.OffsetWx = _left; _state.OffsetWy = _top; _state.ExtentWx = _right - _left; _state.ExtentWy = _bottom - _top; Meta.ReadInt(); Meta.ReadWord(); Meta.Skip(18); int tsize; int function; Cb.SetLineCap(1); Cb.SetLineJoin(1); for (; ;) { var lenMarker = Meta.Length; tsize = Meta.ReadInt(); if (tsize < 3) { break; } function = Meta.ReadWord(); switch (function) { case 0: break; case META_CREATEPALETTE: case META_CREATEREGION: case META_DIBCREATEPATTERNBRUSH: _state.AddMetaObject(new MetaObject()); break; case META_CREATEPENINDIRECT: { var pen = new MetaPen(); pen.Init(Meta); _state.AddMetaObject(pen); break; } case META_CREATEBRUSHINDIRECT: { var brush = new MetaBrush(); brush.Init(Meta); _state.AddMetaObject(brush); break; } case META_CREATEFONTINDIRECT: { var font = new MetaFont(); font.Init(Meta); _state.AddMetaObject(font); break; } case META_SELECTOBJECT: { var idx = Meta.ReadWord(); _state.SelectMetaObject(idx, Cb); break; } case META_DELETEOBJECT: { var idx = Meta.ReadWord(); _state.DeleteMetaObject(idx); break; } case META_SAVEDC: _state.SaveState(Cb); break; case META_RESTOREDC: { var idx = Meta.ReadShort(); _state.RestoreState(idx, Cb); break; } case META_SETWINDOWORG: _state.OffsetWy = Meta.ReadShort(); _state.OffsetWx = Meta.ReadShort(); break; case META_SETWINDOWEXT: _state.ExtentWy = Meta.ReadShort(); _state.ExtentWx = Meta.ReadShort(); break; case META_MOVETO: { var y = Meta.ReadShort(); var p = new System.Drawing.Point(Meta.ReadShort(), y); _state.CurrentPoint = p; break; } case META_LINETO: { var y = Meta.ReadShort(); var x = Meta.ReadShort(); var p = _state.CurrentPoint; Cb.MoveTo(_state.TransformX(p.X), _state.TransformY(p.Y)); Cb.LineTo(_state.TransformX(x), _state.TransformY(y)); Cb.Stroke(); _state.CurrentPoint = new System.Drawing.Point(x, y); break; } case META_POLYLINE: { _state.LineJoinPolygon = Cb; var len = Meta.ReadWord(); var x = Meta.ReadShort(); var y = Meta.ReadShort(); Cb.MoveTo(_state.TransformX(x), _state.TransformY(y)); for (var k = 1; k < len; ++k) { x = Meta.ReadShort(); y = Meta.ReadShort(); Cb.LineTo(_state.TransformX(x), _state.TransformY(y)); } Cb.Stroke(); break; } case META_POLYGON: { if (IsNullStrokeFill(false)) { break; } var len = Meta.ReadWord(); var sx = Meta.ReadShort(); var sy = Meta.ReadShort(); Cb.MoveTo(_state.TransformX(sx), _state.TransformY(sy)); for (var k = 1; k < len; ++k) { var x = Meta.ReadShort(); var y = Meta.ReadShort(); Cb.LineTo(_state.TransformX(x), _state.TransformY(y)); } Cb.LineTo(_state.TransformX(sx), _state.TransformY(sy)); StrokeAndFill(); break; } case META_POLYPOLYGON: { if (IsNullStrokeFill(false)) { break; } var numPoly = Meta.ReadWord(); var lens = new int[numPoly]; for (var k = 0; k < lens.Length; ++k) { lens[k] = Meta.ReadWord(); } for (var j = 0; j < lens.Length; ++j) { var len = lens[j]; var sx = Meta.ReadShort(); var sy = Meta.ReadShort(); Cb.MoveTo(_state.TransformX(sx), _state.TransformY(sy)); for (var k = 1; k < len; ++k) { var x = Meta.ReadShort(); var y = Meta.ReadShort(); Cb.LineTo(_state.TransformX(x), _state.TransformY(y)); } Cb.LineTo(_state.TransformX(sx), _state.TransformY(sy)); } StrokeAndFill(); break; } case META_ELLIPSE: { if (IsNullStrokeFill(_state.LineNeutral)) { break; } var b = Meta.ReadShort(); var r = Meta.ReadShort(); var t = Meta.ReadShort(); var l = Meta.ReadShort(); Cb.Arc(_state.TransformX(l), _state.TransformY(b), _state.TransformX(r), _state.TransformY(t), 0, 360); StrokeAndFill(); break; } case META_ARC: { if (IsNullStrokeFill(_state.LineNeutral)) { break; } var yend = _state.TransformY(Meta.ReadShort()); var xend = _state.TransformX(Meta.ReadShort()); var ystart = _state.TransformY(Meta.ReadShort()); var xstart = _state.TransformX(Meta.ReadShort()); var b = _state.TransformY(Meta.ReadShort()); var r = _state.TransformX(Meta.ReadShort()); var t = _state.TransformY(Meta.ReadShort()); var l = _state.TransformX(Meta.ReadShort()); var cx = (r + l) / 2; var cy = (t + b) / 2; var arc1 = GetArc(cx, cy, xstart, ystart); var arc2 = GetArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) { arc2 += 360; } Cb.Arc(l, b, r, t, arc1, arc2); Cb.Stroke(); break; } case META_PIE: { if (IsNullStrokeFill(_state.LineNeutral)) { break; } var yend = _state.TransformY(Meta.ReadShort()); var xend = _state.TransformX(Meta.ReadShort()); var ystart = _state.TransformY(Meta.ReadShort()); var xstart = _state.TransformX(Meta.ReadShort()); var b = _state.TransformY(Meta.ReadShort()); var r = _state.TransformX(Meta.ReadShort()); var t = _state.TransformY(Meta.ReadShort()); var l = _state.TransformX(Meta.ReadShort()); var cx = (r + l) / 2; var cy = (t + b) / 2; var arc1 = GetArc(cx, cy, xstart, ystart); var arc2 = GetArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) { arc2 += 360; } var ar = PdfContentByte.BezierArc(l, b, r, t, arc1, arc2); if (ar.Count == 0) { break; } var pt = (float[])ar[0]; Cb.MoveTo(cx, cy); Cb.LineTo(pt[0], pt[1]); for (var k = 0; k < ar.Count; ++k) { pt = (float[])ar[k]; Cb.CurveTo(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]); } Cb.LineTo(cx, cy); StrokeAndFill(); break; } case META_CHORD: { if (IsNullStrokeFill(_state.LineNeutral)) { break; } var yend = _state.TransformY(Meta.ReadShort()); var xend = _state.TransformX(Meta.ReadShort()); var ystart = _state.TransformY(Meta.ReadShort()); var xstart = _state.TransformX(Meta.ReadShort()); var b = _state.TransformY(Meta.ReadShort()); var r = _state.TransformX(Meta.ReadShort()); var t = _state.TransformY(Meta.ReadShort()); var l = _state.TransformX(Meta.ReadShort()); var cx = (r + l) / 2; var cy = (t + b) / 2; var arc1 = GetArc(cx, cy, xstart, ystart); var arc2 = GetArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) { arc2 += 360; } var ar = PdfContentByte.BezierArc(l, b, r, t, arc1, arc2); if (ar.Count == 0) { break; } var pt = (float[])ar[0]; cx = pt[0]; cy = pt[1]; Cb.MoveTo(cx, cy); for (var k = 0; k < ar.Count; ++k) { pt = (float[])ar[k]; Cb.CurveTo(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]); } Cb.LineTo(cx, cy); StrokeAndFill(); break; } case META_RECTANGLE: { if (IsNullStrokeFill(true)) { break; } var b = _state.TransformY(Meta.ReadShort()); var r = _state.TransformX(Meta.ReadShort()); var t = _state.TransformY(Meta.ReadShort()); var l = _state.TransformX(Meta.ReadShort()); Cb.Rectangle(l, b, r - l, t - b); StrokeAndFill(); break; } case META_ROUNDRECT: { if (IsNullStrokeFill(true)) { break; } var h = _state.TransformY(0) - _state.TransformY(Meta.ReadShort()); var w = _state.TransformX(Meta.ReadShort()) - _state.TransformX(0); var b = _state.TransformY(Meta.ReadShort()); var r = _state.TransformX(Meta.ReadShort()); var t = _state.TransformY(Meta.ReadShort()); var l = _state.TransformX(Meta.ReadShort()); Cb.RoundRectangle(l, b, r - l, t - b, (h + w) / 4); StrokeAndFill(); break; } case META_INTERSECTCLIPRECT: { var b = _state.TransformY(Meta.ReadShort()); var r = _state.TransformX(Meta.ReadShort()); var t = _state.TransformY(Meta.ReadShort()); var l = _state.TransformX(Meta.ReadShort()); Cb.Rectangle(l, b, r - l, t - b); Cb.EoClip(); Cb.NewPath(); break; } case META_EXTTEXTOUT: { var y = Meta.ReadShort(); var x = Meta.ReadShort(); var count = Meta.ReadWord(); var flag = Meta.ReadWord(); var x1 = 0; var y1 = 0; var x2 = 0; var y2 = 0; if ((flag & (MetaFont.ETO_CLIPPED | MetaFont.ETO_OPAQUE)) != 0) { x1 = Meta.ReadShort(); y1 = Meta.ReadShort(); x2 = Meta.ReadShort(); y2 = Meta.ReadShort(); } var text = new byte[count]; int k; for (k = 0; k < count; ++k) { var c = (byte)Meta.ReadByte(); if (c == 0) { break; } text[k] = c; } string s; try { s = EncodingsRegistry.Instance.GetEncoding(1252).GetString(text, 0, k); } catch { s = System.Text.Encoding.ASCII.GetString(text, 0, k); } OutputText(x, y, flag, x1, y1, x2, y2, s); break; } case META_TEXTOUT: { var count = Meta.ReadWord(); var text = new byte[count]; int k; for (k = 0; k < count; ++k) { var c = (byte)Meta.ReadByte(); if (c == 0) { break; } text[k] = c; } string s; try { s = EncodingsRegistry.Instance.GetEncoding(1252).GetString(text, 0, k); } catch { s = System.Text.Encoding.ASCII.GetString(text, 0, k); } count = (count + 1) & 0xfffe; Meta.Skip(count - k); var y = Meta.ReadShort(); var x = Meta.ReadShort(); OutputText(x, y, 0, 0, 0, 0, 0, s); break; } case META_SETBKCOLOR: _state.CurrentBackgroundColor = Meta.ReadColor(); break; case META_SETTEXTCOLOR: _state.CurrentTextColor = Meta.ReadColor(); break; case META_SETTEXTALIGN: _state.TextAlign = Meta.ReadWord(); break; case META_SETBKMODE: _state.BackgroundMode = Meta.ReadWord(); break; case META_SETPOLYFILLMODE: _state.PolyFillMode = Meta.ReadWord(); break; case META_SETPIXEL: { var color = Meta.ReadColor(); var y = Meta.ReadShort(); var x = Meta.ReadShort(); Cb.SaveState(); Cb.SetColorFill(color); Cb.Rectangle(_state.TransformX(x), _state.TransformY(y), .2f, .2f); Cb.Fill(); Cb.RestoreState(); break; } case META_DIBSTRETCHBLT: case META_STRETCHDIB: { var rop = Meta.ReadInt(); if (function == META_STRETCHDIB) { /*int usage = */ Meta.ReadWord(); } var srcHeight = Meta.ReadShort(); var srcWidth = Meta.ReadShort(); var ySrc = Meta.ReadShort(); var xSrc = Meta.ReadShort(); var destHeight = _state.TransformY(Meta.ReadShort()) - _state.TransformY(0); var destWidth = _state.TransformX(Meta.ReadShort()) - _state.TransformX(0); var yDest = _state.TransformY(Meta.ReadShort()); var xDest = _state.TransformX(Meta.ReadShort()); var b = new byte[(tsize * 2) - (Meta.Length - lenMarker)]; for (var k = 0; k < b.Length; ++k) { b[k] = (byte)Meta.ReadByte(); } try { var inb = new MemoryStream(b); var bmp = BmpImage.GetImage(inb, true, b.Length); Cb.SaveState(); Cb.Rectangle(xDest, yDest, destWidth, destHeight); Cb.Clip(); Cb.NewPath(); bmp.ScaleAbsolute(destWidth * bmp.Width / srcWidth, -destHeight * bmp.Height / srcHeight); bmp.SetAbsolutePosition(xDest - destWidth * xSrc / srcWidth, yDest + destHeight * ySrc / srcHeight - bmp.ScaledHeight); Cb.AddImage(bmp); Cb.RestoreState(); } catch { // empty on purpose } break; } } Meta.Skip((tsize * 2) - (Meta.Length - lenMarker)); } _state.Cleanup(Cb); }
public Chap13_form() { Console.WriteLine("Chapter 13: a form with some text"); // step 1: creation of a document-object Document document = new Document(PageSize.A4, 50, 50, 50, 50); try { // step 2: we create a writer that listens to the document PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("Chap13_form.pdf", FileMode.Create)); PdfAcroForm acroForm = writer.AcroForm; // step 3: we open the document document.Open(); // step 4: we add some content BaseFont helv = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED); float fontSize = 12; acroForm.AddSingleLineTextField("name", "your name", helv, fontSize, 171, 800, 350, 820); acroForm.AddMultiLineTextField("msg", "Hello iText!\nThis is a Test\nThere are multiple lines in this textfield", helv, fontSize, 171, 730, 350, 790); acroForm.AddSingleLinePasswordField("password", "", helv, fontSize, 171, 700, 350, 720); acroForm.AddHtmlPostButton("btn", "SUBMIT", "noValue", "Chap13.php", helv, fontSize, 355, 700, 420, 725); acroForm.AddResetButton("reset", "RESET", null, helv, fontSize, 430, 700, 495, 725); acroForm.AddCheckBox("CB1", "Food", true, 180, 685, 190, 695); acroForm.AddCheckBox("CB2", "Drinks", false, 180, 645, 210, 675); PdfFormField radiogroup = acroForm.GetRadioGroup("CreditCard", "Visa", true); acroForm.AddRadioButton(radiogroup, "Visa", 180, 625, 195, 640); acroForm.AddRadioButton(radiogroup, "MasterCard", 200, 625, 215, 640); acroForm.AddRadioButton(radiogroup, "American", 220, 625, 235, 640); acroForm.AddRadioGroup(radiogroup); String[] colors = { "Red", "Green", "Blue" }; String[,] colorvalues = { { "#FF0000", "Red" }, { "#00FF00", "Green" }, { "#0000FF", "Blue" } }; acroForm.AddSelectList("list1", colors, "Green", helv, fontSize, 171, 550, 300, 600); acroForm.AddSelectList("list2", colorvalues, "#0000FF", helv, fontSize, 315, 550, 450, 600); acroForm.AddComboBox("combo1", colors, "Green", true, helv, fontSize, 171, 440, 300, 490); acroForm.AddComboBox("combo2", colorvalues, "#0000FE", false, helv, fontSize, 315, 440, 450, 490); PdfContentByte cb = new PdfContentByte(null); cb.SetRGBColorStroke(0x00, 0x00, 0x00); cb.SetRGBColorFill(0xFF, 0x00, 0x00); cb.Arc(0, 0, 100, 100, 0, 360); cb.FillStroke(); cb.SetRGBColorStroke(0x00, 0x00, 0x00); cb.SetRGBColorFill(0xFF, 0xFF, 0xFF); cb.Arc(20, 20, 80, 80, 0, 360); cb.FillStroke(); cb.SetRGBColorStroke(0x00, 0x00, 0x00); cb.SetRGBColorFill(0xFF, 0x00, 0x00); cb.Arc(40, 40, 60, 60, 0, 360); cb.FillStroke(); cb.SetRGBColorFill(0x00, 0x00, 0x00); cb.Arc(48, 48, 52, 52, 0, 360); cb.Fill(); acroForm.AddMap("map", null, "Chap13.php", cb, 171, 300, 271, 400); acroForm.AddHiddenField("hidden", "secret"); } catch (DocumentException de) { Console.Error.WriteLine(de.Message); } catch (IOException ioe) { Console.Error.WriteLine(ioe.Message); } // step 5: close the document document.Close(); }
public bool genererPdf(string navire, bool pm, string repere, int semaineDD, int anneeDD, int semaineDF, int anneeDF, ArrayList reservations, ArrayList prets) { // todo : Le footer n'apparaît plus string chantier = pm ? "PM" : "BORD"; if (!Directory.Exists(_cheminDossier + "\\" + navire + "\\" + chantier)) { Directory.CreateDirectory(_cheminDossier + "\\" + navire + "\\" + chantier); } string cheminFichier = _cheminDossier + "\\" + navire + "\\" + chantier + "\\" + repere + ".pdf"; if (estEnCoursUtilisation(cheminFichier) == false || !File.Exists(cheminFichier)) { _dernierePageAvecFooter = 0; FileStream fs = new FileStream(_cheminDossier + "\\" + navire + "\\" + chantier + "\\" + repere + ".pdf", FileMode.Create); Document doc = new Document(PageSize.A4); PdfWriter writer = PdfWriter.GetInstance(doc, fs); string[] jours = new string[] { "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche" }; string[] mois = new string[] { "janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre" }; // ######################################\\ DEBUT GENERATION PDF doc.Open(); AfficherRectangle(writer, 0, 700, 595, 3, 255, 93, 0); // barre séparation en-tête / tableau 1 AfficherRectangle(writer, 215, 751, 300, 75, 120, 120, 120); // rectangle dd/df AfficherRectangle(writer, 230, 726, 150, 25, 200, 200, 200); // rectangle date maj DateTime aujourdHui = DateTime.Now; string heure = aujourdHui.Hour.ToString().Length < 2 ? "0" + aujourdHui.Hour.ToString() : aujourdHui.Hour.ToString(); string minutes = aujourdHui.Minute.ToString().Length < 2 ? "0" + aujourdHui.Minute.ToString() : aujourdHui.Minute.ToString(); AfficherTexte(writer, jours[(int)aujourdHui.DayOfWeek - 1] + " " + aujourdHui.Day + " " + mois[(int)aujourdHui.Month - 1] + " " + aujourdHui.Year, 240, 624, _policeReduite, 0, 0, 0); AfficherTexte(writer, heure + " h " + minutes, 240, 616, _policeReduite, 0, 0, 0); AfficherRectangleArrondi(writer, 60, 716, 170, 109, 15, 3, 255, 255, 255); AfficherTexte(writer, navire, 80, 645, _policeGras, 0, 0, 0); AfficherTexte(writer, repere, 170, 675, _policeGrasMoyenne, 0, 0, 0); int axeX = pm ? 177 : 166; AfficherTexte(writer, chantier, axeX, 620, _policeGrasMoyenne, 0, 0, 0); PdfContentByte cb = writer.DirectContent; cb.SetLineWidth(3); cb.Arc(150, 576, 150, 858, 0, 50); cb.Stroke(); cb.Arc(92, 769, 230, 769, 0, 100); cb.Stroke(); cb.SetLineWidth(1); cb.Arc(485, 676, 485, 827, 0, 80); cb.Stroke(); AfficherTexte(writer, "Début", 240, 674, _policeGrasMoyenne, 255, 255, 255); AfficherTexte(writer, "Fin", 240, 649, _policeGrasMoyenne, 255, 255, 255); cb.SetLineWidth(1); AfficherRectangle(writer, 300, 785, 95, 20, 240, 240, 240); AfficherRectangle(writer, 300, 760, 95, 20, 240, 240, 240); string semaine = semaineDD.ToString().Length < 2 ? "0" + semaineDD.ToString() : semaineDD.ToString(); AfficherTexte(writer, "S" + semaine + " / " + anneeDD, 307, 674, _policeGrasMoyenne, 0, 0, 0); semaine = semaineDF.ToString().Length < 2 ? "0" + semaineDF.ToString() : semaineDD.ToString(); AfficherTexte(writer, "S" + semaine + " / " + anneeDF, 307, 649, _policeGrasMoyenne, 0, 0, 0); iTextSharp.text.Paragraph space = new iTextSharp.text.Paragraph("\n\n\n\n\n\n\n\n"); doc.Add(space); iTextSharp.text.Paragraph petitSpace = new iTextSharp.text.Paragraph("\n"); AfficherTableauRéservations(doc, writer, reservations); doc.Add(petitSpace); AfficherTableauPrets(doc, writer, prets); // Contient toutes les classes des équerres réservées ou prêtées List <string> listeClasses = new List <string>(); if (reservations.Count > 0) { for (int k = 3; k < reservations.Count; k += 5) { if (!listeClasses.Contains(reservations[k])) { listeClasses.Add((string)reservations[k]); } } } if (prets.Count > 0) { for (int k = 3; k < prets.Count; k += 6) { if (!listeClasses.Contains(prets[k])) { listeClasses.Add((string)prets[k]); } } } listeClasses.Sort(); for (int k = 0; k < listeClasses.Count; k++) { switch (listeClasses[k]) { case "A": AfficherRectangleArrondi(writer, 490, 802, 20, 20, 5, 1, 0, 200, 0); AfficherTexte(writer, "A", 494, 691, _policeGrasMoyenne, 255, 255, 255); break; case "B": AfficherRectangleArrondi(writer, 490, 779, 20, 20, 5, 1, 255, 93, 0); AfficherTexte(writer, "B", 494, 668, _policeGrasMoyenne, 255, 255, 255); break; case "C": AfficherRectangleArrondi(writer, 490, 756, 20, 20, 5, 1, 255, 0, 0); AfficherTexte(writer, "C", 494, 645, _policeGrasMoyenne, 255, 255, 255); break; } } doc.Close(); // ######################################\\ return(true); } else { return(false); } }
public void Verify_PathConstructionAndPainting_CanBeCreated() { var pdfFilePath = TestUtils.GetOutputFileName(); var stream = new FileStream(pdfFilePath, FileMode.Create); // step 1 var document = new Document(); // step 2 PdfWriter writer = PdfWriter.GetInstance(document, stream); // step 3 document.AddAuthor(TestUtils.Author); document.Open(); // step 4 PdfContentByte canvas = writer.DirectContent; // draw squares createSquares(canvas, 50, 720, 80, 20); ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase( "Methods MoveTo(), LineTo(), stroke(), closePathStroke(), Fill(), and closePathFill()" ), 50, 700, 0 ); // draw Bezier curves createBezierCurves(canvas, 70, 600, 80, 670, 140, 690, 160, 630, 160); ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase("Different CurveTo() methods, followed by stroke()"), 50, 580, 0 ); // draw stars and circles createStarsAndCircles(canvas, 50, 470, 40, 20); ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase( "Methods Fill(), eoFill(), NewPath(), FillStroke(), and EoFillStroke()" ), 50, 450, 0 ); // draw different shapes using convenience methods canvas.SaveState(); canvas.SetColorStroke(new GrayColor(0.2f)); canvas.SetColorFill(new GrayColor(0.9f)); canvas.Arc(50, 270, 150, 330, 45, 270); canvas.Ellipse(170, 270, 270, 330); canvas.Circle(320, 300, 30); canvas.RoundRectangle(370, 270, 80, 60, 20); canvas.FillStroke(); canvas.RestoreState(); Rectangle rect = new Rectangle(470, 270, 550, 330) { BorderWidthBottom = 10, BorderColorBottom = new GrayColor(0f), BorderWidthLeft = 4, BorderColorLeft = new GrayColor(0.9f), BackgroundColor = new GrayColor(0.4f) }; canvas.Rectangle(rect); ColumnText.ShowTextAligned( canvas, Element.ALIGN_LEFT, new Phrase("Convenience methods"), 50, 250, 0 ); document.Close(); stream.Dispose(); TestUtils.VerifyPdfFileIsReadable(pdfFilePath); }