private void BuildCurvesPage( Document document ) { // 1. Add the page to the document! Page page = new Page(document); // Instantiates the page inside the document context. document.Pages.Add(page); // Puts the page in the pages collection. SizeF pageSize = page.Size; // 2. Create a content composer for the page! PrimitiveComposer composer = new PrimitiveComposer(page); // 3. Drawing the page contents... composer.SetFont( new fonts::StandardType1Font( document, fonts::StandardType1Font.FamilyEnum.Courier, true, false ), 32 ); { BlockComposer blockComposer = new BlockComposer(composer); blockComposer.Begin(new RectangleF(30, 0, pageSize.Width - 60, 50), XAlignmentEnum.Center, YAlignmentEnum.Middle); blockComposer.ShowText("Curves"); blockComposer.End(); } // 3.1. Arcs. { float y = 100; for ( int rowIndex = 0; rowIndex < 4; rowIndex++ ) { int angleStep = 45; int startAngle = 0; int endAngle = angleStep; float x = 100; float diameterX; float diameterY; switch (rowIndex) { case 0: default: diameterX = 40; diameterY = 40; break; case 1: diameterX = 40; diameterY = 20; break; case 2: diameterX = 20; diameterY = 40; break; case 3: diameterX = 40; diameterY = 40; break; } for ( int index = 0, length = 360 / angleStep; index < length; index++ ) { RectangleF arcFrame = new RectangleF((float)x, (float)y, (float)diameterX, (float)diameterY); // Drawing the arc frame... composer.BeginLocalState(); composer.SetLineWidth(0.25f); composer.SetLineDash(new LineDash(new double[] { 5, 5 }, 3)); composer.DrawRectangle(arcFrame); composer.Stroke(); composer.End(); // Draw the arc! composer.DrawArc(arcFrame, startAngle, endAngle); composer.Stroke(); endAngle += angleStep; switch (rowIndex) { case 3: startAngle += angleStep; break; } x += 50; } y += diameterY + 10; } } // 3.2. Circle. { RectangleF arcFrame = new RectangleF(100, 300, 100, 100); // Drawing the circle frame... composer.BeginLocalState(); composer.SetLineWidth(0.25f); composer.SetLineDash(new LineDash(new double[] { 5, 5 }, 3)); composer.DrawRectangle(arcFrame); composer.Stroke(); composer.End(); // Drawing the circle... composer.SetFillColor(DeviceRGBColor.Get(System.Drawing.Color.Red)); composer.DrawEllipse(arcFrame); composer.FillStroke(); } // 3.3. Horizontal ellipse. { RectangleF arcFrame = new RectangleF(210, 300, 100, 50); // Drawing the ellipse frame... composer.BeginLocalState(); composer.SetLineWidth(0.25f); composer.SetLineDash(new LineDash(new double[] { 5, 5 }, 3)); composer.DrawRectangle(arcFrame); composer.Stroke(); composer.End(); // Drawing the ellipse... composer.SetFillColor(DeviceRGBColor.Get(System.Drawing.Color.Green)); composer.DrawEllipse(arcFrame); composer.FillStroke(); } // 3.4. Vertical ellipse. { RectangleF arcFrame = new RectangleF(320, 300, 50, 100); // Drawing the ellipse frame... composer.BeginLocalState(); composer.SetLineWidth(0.25f); composer.SetLineDash(new LineDash(new double[] { 5, 5 }, 3)); composer.DrawRectangle(arcFrame); composer.Stroke(); composer.End(); // Drawing the ellipse... composer.SetFillColor(DeviceRGBColor.Get(System.Drawing.Color.Blue)); composer.DrawEllipse(arcFrame); composer.FillStroke(); } // 3.5. Spirals. { float y = 500; float spiralWidth = 100; composer.SetLineWidth(.5f); for ( int rowIndex = 0; rowIndex < 3; rowIndex++ ) { float x = 150; float branchWidth = .5f; float branchRatio = 1; for ( int spiralIndex = 0; spiralIndex < 4; spiralIndex++ ) { float spiralTurnsCount; switch (rowIndex) { case 0: default: spiralTurnsCount = spiralWidth / (branchWidth * 8); break; case 1: spiralTurnsCount = (float)(spiralWidth / (branchWidth * 8 * (spiralIndex * 1.15 + 1))); break; } switch (rowIndex) { case 2: composer.SetLineDash(new LineDash(new double[] { 10, 5 })); composer.SetLineCap(LineCapEnum.Round); break; default: break; } composer.DrawSpiral( new PointF((float)x, (float)y), 0, 360 * spiralTurnsCount, branchWidth, branchRatio ); composer.Stroke(); x += spiralWidth + 10; switch (rowIndex) { case 0: default: branchWidth += 1; break; case 1: branchRatio += .035f; break; } switch (rowIndex) { case 2: composer.SetLineWidth(composer.State.LineWidth + .5f); break; } } y += spiralWidth + 10; } } // 4. Flush the contents into the page! composer.Flush(); }
private void Apply( RadioButton field ) { Document document = field.Document; foreach (Widget widget in field.Widgets) { { PdfDictionary widgetDataObject = widget.BaseDataObject; widgetDataObject[PdfName.DA] = new PdfString("/ZaDb 0 Tf 0 0 0 rg"); widgetDataObject[PdfName.MK] = new PdfDictionary( new PdfName[] { PdfName.BG, PdfName.BC, PdfName.CA }, new PdfDirectObject[] { new PdfArray(new PdfDirectObject[] { PdfReal.Get(0.9412), PdfReal.Get(0.9412), PdfReal.Get(0.9412) }), new PdfArray(new PdfDirectObject[] { PdfInteger.Default, PdfInteger.Default, PdfInteger.Default }), new PdfString("l") } ); widgetDataObject[PdfName.BS] = new PdfDictionary( new PdfName[] { PdfName.W, PdfName.S }, new PdfDirectObject[] { PdfReal.Get(0.8), PdfName.S } ); widgetDataObject[PdfName.H] = PdfName.P; } Appearance appearance = widget.Appearance; AppearanceStates normalAppearance = appearance.Normal; FormXObject onState = normalAppearance[new PdfName(widget.Value)]; //TODO:verify!!! // appearance.getRollover().put(new PdfName(...),onState); // appearance.getDown().put(new PdfName(...),onState); // appearance.getRollover().put(PdfName.Off,offState); // appearance.getDown().put(PdfName.Off,offState); SKSize size = widget.Box.Size; float lineWidth = 1; SKRect frame = SKRect.Create(lineWidth / 2, lineWidth / 2, size.Width - lineWidth, size.Height - lineWidth); { PrimitiveComposer composer = new PrimitiveComposer(onState); if (GraphicsVisibile) { composer.BeginLocalState(); composer.SetLineWidth(lineWidth); composer.SetFillColor(BackColor); composer.SetStrokeColor(ForeColor); composer.DrawEllipse(frame); composer.FillStroke(); composer.End(); } BlockComposer blockComposer = new BlockComposer(composer); blockComposer.Begin(frame, XAlignmentEnum.Center, YAlignmentEnum.Middle); composer.SetFillColor(ForeColor); composer.SetFont( new StandardType1Font( document, StandardType1Font.FamilyEnum.ZapfDingbats, true, false ), size.Height * 0.8 ); blockComposer.ShowText(new String(new char[] { RadioSymbol })); blockComposer.End(); composer.Flush(); } FormXObject offState = new FormXObject(document, size); normalAppearance[PdfName.Off] = offState; { if (GraphicsVisibile) { PrimitiveComposer composer = new PrimitiveComposer(offState); composer.BeginLocalState(); composer.SetLineWidth(lineWidth); composer.SetFillColor(BackColor); composer.SetStrokeColor(ForeColor); composer.DrawEllipse(frame); composer.FillStroke(); composer.End(); composer.Flush(); } } } }
private void Apply( RadioButton field ) { Document document = field.Document; foreach(Widget widget in field.Widgets) { { PdfDictionary widgetDataObject = widget.BaseDataObject; widgetDataObject[PdfName.DA] = new PdfString("/ZaDb 0 Tf 0 0 0 rg"); widgetDataObject[PdfName.MK] = new PdfDictionary( new PdfName[] { PdfName.BG, PdfName.BC, PdfName.CA }, new PdfDirectObject[] { new PdfArray(new PdfDirectObject[]{PdfReal.Get(0.9412), PdfReal.Get(0.9412), PdfReal.Get(0.9412)}), new PdfArray(new PdfDirectObject[]{PdfInteger.Default, PdfInteger.Default, PdfInteger.Default}), new PdfString("l") } ); widgetDataObject[PdfName.BS] = new PdfDictionary( new PdfName[] { PdfName.W, PdfName.S }, new PdfDirectObject[] { PdfReal.Get(0.8), PdfName.S } ); widgetDataObject[PdfName.H] = PdfName.P; } Appearance appearance = widget.Appearance; if(appearance == null) {widget.Appearance = appearance = new Appearance(document);} AppearanceStates normalAppearance = appearance.Normal; FormXObject onState = normalAppearance[new PdfName(((DualWidget)widget).WidgetName)]; //TODO:verify!!! // appearance.getRollover().put(new PdfName(...),onState); // appearance.getDown().put(new PdfName(...),onState); // appearance.getRollover().put(PdfName.Off,offState); // appearance.getDown().put(PdfName.Off,offState); SizeF size = widget.Box.Size; float lineWidth = 1; RectangleF frame = new RectangleF(lineWidth / 2, lineWidth / 2, size.Width - lineWidth, size.Height - lineWidth); { PrimitiveComposer composer = new PrimitiveComposer(onState); if(GraphicsVisibile) { composer.BeginLocalState(); composer.SetLineWidth(lineWidth); composer.SetFillColor(BackColor); composer.SetStrokeColor(ForeColor); composer.DrawEllipse(frame); composer.FillStroke(); composer.End(); } BlockComposer blockComposer = new BlockComposer(composer); blockComposer.Begin(frame,XAlignmentEnum.Center,YAlignmentEnum.Middle); composer.SetFillColor(ForeColor); composer.SetFont( new StandardType1Font( document, StandardType1Font.FamilyEnum.ZapfDingbats, true, false ), size.Height * 0.8 ); blockComposer.ShowText(new String(new char[]{RadioSymbol})); blockComposer.End(); composer.Flush(); } FormXObject offState = new FormXObject(document, size); normalAppearance[PdfName.Off] = offState; { if(GraphicsVisibile) { PrimitiveComposer composer = new PrimitiveComposer(offState); composer.BeginLocalState(); composer.SetLineWidth(lineWidth); composer.SetFillColor(BackColor); composer.SetStrokeColor(ForeColor); composer.DrawEllipse(frame); composer.FillStroke(); composer.End(); composer.Flush(); } } } }
public FormXObject Build( ) { bool isRound = type == TypeEnum.Round; bool isStriped = type == TypeEnum.Striped; double textScale = .5; double borderWidth = this.borderWidth.GetValue(width); double doubleBorderGap = borderDoubled ? borderWidth : 0; double fontSize = 10; fontSize *= ((width - (isStriped ? 2 : doubleBorderGap * 2 + (borderWidth * (borderDoubled ? 1.5 : 1) * 2) + width * (isRound ? .15 : .05))) / textScale) / font.GetWidth(text, fontSize); float height = (float)(isRound ? width : (font.GetAscent(fontSize) * 1.2 + doubleBorderGap * 2 + (borderWidth * (borderDoubled ? 1.5 : 1) * 2))); SizeF size = new SizeF(width, height); FormXObject appearance = new FormXObject(document, size); { PrimitiveComposer composer = new PrimitiveComposer(appearance); if (color != null) { composer.SetStrokeColor(color); composer.SetFillColor(color); } composer.SetTextScale(textScale); composer.SetFont(font, fontSize); composer.ShowText(text, new PointF(size.Width / 2, (float)(size.Height / 2 - font.GetDescent(fontSize) * .4)), XAlignmentEnum.Center, YAlignmentEnum.Middle, 0); double borderRadius = isRound ? 0 : this.borderRadius.GetValue((size.Width + size.Height) / 2); RectangleF prevBorderBox = appearance.Box; for (int borderStep = 0, borderStepLimit = (borderDoubled ? 2 : 1); borderStep < borderStepLimit; borderStep++) { if (borderStep == 0) { composer.SetLineWidth(borderWidth); } else { composer.SetLineWidth(composer.State.LineWidth / 2); } float lineWidth = (float)(borderStep > 0 ? composer.State.LineWidth / 2 : borderWidth); float marginY = (float)(lineWidth / 2 + (borderStep > 0 ? composer.State.LineWidth + doubleBorderGap : 0)); float marginX = isStriped ? 0 : marginY; RectangleF borderBox = new RectangleF(prevBorderBox.X + marginX, prevBorderBox.Y + marginY, prevBorderBox.Width - marginX * 2, prevBorderBox.Height - marginY * 2); if (isRound) { composer.DrawEllipse(borderBox); } else { if (isStriped) { composer.DrawLine(new PointF(borderBox.Left, borderBox.Top), new PointF(borderBox.Right, borderBox.Top)); composer.DrawLine(new PointF(borderBox.Left, borderBox.Bottom), new PointF(borderBox.Right, borderBox.Bottom)); } else { composer.DrawRectangle(borderBox, borderRadius * (1 - .5 * borderStep)); } } composer.Stroke(); prevBorderBox = borderBox; } composer.Flush(); } return(appearance); }
private void Apply( RadioButton field ) { Document document = field.Document; foreach (Widget widget in field.Widgets) { { PdfDictionary widgetDataObject = widget.BaseDataObject; widgetDataObject[PdfName.DA] = new PdfString("/ZaDb 0 Tf 0 0 0 rg"); widgetDataObject[PdfName.MK] = new PdfDictionary( new PdfName[] { PdfName.BG, PdfName.BC, PdfName.CA }, new PdfDirectObject[] { new PdfArray(new PdfDirectObject[] { new PdfReal(0.9412), new PdfReal(0.9412), new PdfReal(0.9412) }), new PdfArray(new PdfDirectObject[] { new PdfInteger(0), new PdfInteger(0), new PdfInteger(0) }), new PdfString("l") } ); widgetDataObject[PdfName.BS] = new PdfDictionary( new PdfName[] { PdfName.W, PdfName.S }, new PdfDirectObject[] { new PdfReal(0.8), PdfName.S } ); widgetDataObject[PdfName.H] = PdfName.P; } Appearance appearance = widget.Appearance; if (appearance == null) { widget.Appearance = appearance = new Appearance(document); } AppearanceStates normalAppearance = appearance.Normal; FormXObject onState = normalAppearance[new PdfName(((DualWidget)widget).WidgetName)]; //TODO:verify!!! // appearance.getRollover().put(new PdfName(...),onState); // appearance.getDown().put(new PdfName(...),onState); // appearance.getRollover().put(PdfName.Off,offState); // appearance.getDown().put(PdfName.Off,offState); SizeF size = widget.Box.Size; RectangleF frame = new RectangleF(1, 1, size.Width - 2, size.Height - 2); { onState.Size = new Size((int)size.Width, (int)size.Height);; PrimitiveComposer composer = new PrimitiveComposer(onState); composer.BeginLocalState(); composer.SetFillColor(BackColor); composer.SetStrokeColor(ForeColor); composer.DrawEllipse(frame); composer.FillStroke(); composer.End(); BlockComposer blockComposer = new BlockComposer(composer); blockComposer.Begin(frame, AlignmentXEnum.Center, AlignmentYEnum.Middle); composer.SetFillColor(ForeColor); composer.SetFont( new StandardType1Font( document, StandardType1Font.FamilyEnum.ZapfDingbats, true, false ), size.Height * 0.8f ); blockComposer.ShowText(new String(new char[] { RadioSymbol })); blockComposer.End(); composer.Flush(); } FormXObject offState = new FormXObject(document); normalAppearance[PdfName.Off] = offState; { offState.Size = new Size((int)size.Width, (int)size.Height);; PrimitiveComposer composer = new PrimitiveComposer(offState); composer.BeginLocalState(); composer.SetFillColor(BackColor); composer.SetStrokeColor(ForeColor); composer.DrawEllipse(frame); composer.FillStroke(); composer.End(); composer.Flush(); } } }
private void BuildCurvesPage( Document document ) { // 1. Add the page to the document! Page page = new Page(document); // Instantiates the page inside the document context. document.Pages.Add(page); // Puts the page in the pages collection. SizeF pageSize = page.Size; // 2. Create a content composer for the page! PrimitiveComposer composer = new PrimitiveComposer(page); // 3. Drawing the page contents... composer.SetFont( new fonts::StandardType1Font( document, fonts::StandardType1Font.FamilyEnum.Courier, true, false ), 32 ); { BlockComposer blockComposer = new BlockComposer(composer); blockComposer.Begin(new RectangleF(30,0,pageSize.Width-60,50),XAlignmentEnum.Center,YAlignmentEnum.Middle); blockComposer.ShowText("Curves"); blockComposer.End(); } // 3.1. Arcs. { float y = 100; for( int rowIndex = 0; rowIndex < 4; rowIndex++ ) { int angleStep = 45; int startAngle = 0; int endAngle = angleStep; float x = 100; float diameterX; float diameterY; switch(rowIndex) { case 0: default: diameterX = 40; diameterY = 40; break; case 1: diameterX = 40; diameterY = 20; break; case 2: diameterX = 20; diameterY = 40; break; case 3: diameterX = 40; diameterY = 40; break; } for( int index = 0, length = 360/angleStep; index < length; index++ ) { RectangleF arcFrame = new RectangleF((float)x,(float)y,(float)diameterX,(float)diameterY); // Drawing the arc frame... composer.BeginLocalState(); composer.SetLineWidth(0.25f); composer.SetLineDash(new LineDash(new double[]{5,5}, 3)); composer.DrawRectangle(arcFrame); composer.Stroke(); composer.End(); // Draw the arc! composer.DrawArc(arcFrame,startAngle,endAngle); composer.Stroke(); endAngle += angleStep; switch(rowIndex) { case 3: startAngle += angleStep; break; } x += 50; } y += diameterY + 10; } } // 3.2. Circle. { RectangleF arcFrame = new RectangleF(100, 300, 100, 100); // Drawing the circle frame... composer.BeginLocalState(); composer.SetLineWidth(0.25f); composer.SetLineDash(new LineDash(new double[]{5,5}, 3)); composer.DrawRectangle(arcFrame); composer.Stroke(); composer.End(); // Drawing the circle... composer.SetFillColor(DeviceRGBColor.Get(System.Drawing.Color.Red)); composer.DrawEllipse(arcFrame); composer.FillStroke(); } // 3.3. Horizontal ellipse. { RectangleF arcFrame = new RectangleF(210, 300, 100, 50); // Drawing the ellipse frame... composer.BeginLocalState(); composer.SetLineWidth(0.25f); composer.SetLineDash(new LineDash(new double[]{5,5}, 3)); composer.DrawRectangle(arcFrame); composer.Stroke(); composer.End(); // Drawing the ellipse... composer.SetFillColor(DeviceRGBColor.Get(System.Drawing.Color.Green)); composer.DrawEllipse(arcFrame); composer.FillStroke(); } // 3.4. Vertical ellipse. { RectangleF arcFrame = new RectangleF(320, 300, 50, 100); // Drawing the ellipse frame... composer.BeginLocalState(); composer.SetLineWidth(0.25f); composer.SetLineDash(new LineDash(new double[]{5,5}, 3)); composer.DrawRectangle(arcFrame); composer.Stroke(); composer.End(); // Drawing the ellipse... composer.SetFillColor(DeviceRGBColor.Get(System.Drawing.Color.Blue)); composer.DrawEllipse(arcFrame); composer.FillStroke(); } // 3.5. Spirals. { float y = 500; float spiralWidth = 100; composer.SetLineWidth(.5f); for( int rowIndex = 0; rowIndex < 3; rowIndex++ ) { float x = 150; float branchWidth = .5f; float branchRatio = 1; for( int spiralIndex = 0; spiralIndex < 4; spiralIndex++ ) { float spiralTurnsCount; switch(rowIndex) { case 0: default: spiralTurnsCount = spiralWidth/(branchWidth*8); break; case 1: spiralTurnsCount = (float)(spiralWidth/(branchWidth*8*(spiralIndex*1.15+1))); break; } switch(rowIndex) { case 2: composer.SetLineDash(new LineDash(new double[]{10,5})); composer.SetLineCap(LineCapEnum.Round); break; default: break; } composer.DrawSpiral( new PointF((float)x,(float)y), 0, 360*spiralTurnsCount, branchWidth, branchRatio ); composer.Stroke(); x += spiralWidth + 10; switch(rowIndex) { case 0: default: branchWidth += 1; break; case 1: branchRatio += .035f; break; } switch(rowIndex) { case 2: composer.SetLineWidth(composer.State.LineWidth+.5f); break; } } y += spiralWidth + 10; } } // 4. Flush the contents into the page! composer.Flush(); }