protected override Text CreateAdvancedText(string text, Graphics graphics) { var font = CreateFont(graphics); var dpi = graphics.DpiX; var location = GetDrawingBaselineLocation(dpi); var plainText = new PlainText(text, font) { Alignment = VOAligmnentToAdvanced(Alignment), Underline = Underline, Tracking = Tracking, Leading = Utils.EqualsOfFloatNumbers(0, Leading) ? font.Size * 1.2f : Leading, Paragraph = { OverlapLines = true }, Vertical = IsVertical }; if (!Utils.EqualsOfFloatNumbers(1, HorizontalScale) || !Utils.EqualsOfFloatNumbers(1, VerticalScale)) { location.Scale(1 / HorizontalScale, 1 / VerticalScale); plainText.Transform.Scale(HorizontalScale, VerticalScale); } plainText.Position = location.ToPointF(); return(plainText); }
protected internal override void DrawContent(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement) { if (Text != null && !string.IsNullOrEmpty(Text.Trim()) && !TextColor.IsTransparent) { DrawText(graphics, destImageParams, colorManagement); } }
private static void DrawVObjects(IEnumerable <VObject> vObjects, Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement) { foreach (var vObject in vObjects) { vObject.Draw(graphics, destImageParams, colorManagement); } }
private void ExtendRectangle(BoundedText text, Graphics graphics, int recursionLevel = 0) { const int maxRecursionLevel = 20; if (!text.GetBlackBox().IsEmpty || recursionLevel >= maxRecursionLevel) { return; } // Calculate increment for the rectangle dimensions. It must be a positive even integer. var increment = (int)(System.Math.Min(graphics.Width, graphics.Height) * 0.1f); if (increment % 2 == 1) { increment += 1; } increment = System.Math.Max(increment, Common.ConvertPointsToPixels(graphics.DpiX, 2)); // Create an extended rectangle and move its top-left corner in accordance with the alignment var rect = new RectangleF(text.Rectangle.X, text.Rectangle.Y, text.Rectangle.Width + increment, text.Rectangle.Height + increment); if (text.Alignment == AdvancedTextAlignment.Center) { rect.X -= increment / 2f; } else if (text.Alignment == AdvancedTextAlignment.Right) { rect.X -= increment; } text.Rectangle = rect; ExtendRectangle(text, graphics, ++recursionLevel); }
protected Font CreateFont(Graphics graphics) { lock (Configuration.Instance.FontRegistry) graphics.FontRegistry = new CustomFontRegistry(Configuration.Instance.FontRegistry); var gmFont = graphics.CreateFont(Font.PostScriptName, Font.Size); gmFont.FauxBold = Font.FauxBold; gmFont.FauxItalic = Font.FauxItalic; return(gmFont); }
internal void DrawText(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement) { var text = CreateText(graphics); var color = ColorManagement.ConvertColor(colorManagement, TextColor, destImageParams); color = color.ScaleAlpha(Opacity); text.Brush = new SolidBrush(color); RotateText(text, graphics.DpiX); graphics.DrawText(text); }
protected override Text CreateAdvancedText(string text, Graphics graphics) { var font = CreateFont(graphics); var plainText = new PlainText(text, font) { Alignment = VOAligmnentToAdvanced(Alignment), Underline = Underline, Tracking = Tracking, Leading = Utils.EqualsOfFloatNumbers(0, Leading) ? font.Size * 1.2f : Leading, Paragraph = { OverlapLines = true }, Vertical = IsVertical }; var rectangle = MeasureText(graphics.DpiX); var blackbox = plainText.GetBlackBox(); var horizontalScale = !Utils.EqualsOfFloatNumbers(blackbox.Width, 0) ? (rectangle.Width - RenderingMargin * 2) / blackbox.Width : 1f; var verticalScale = !Utils.EqualsOfFloatNumbers(blackbox.Height, 0) ? (rectangle.Height - RenderingMargin * 2) / blackbox.Height : 1f; float alignmentShift = 0; if (Alignment != TextAlignment.Left) { alignmentShift = !IsVertical ? rectangle.Width - blackbox.Width : rectangle.Height - blackbox.Height; alignmentShift -= RenderingMargin * 2; if (Alignment == TextAlignment.Center) { alignmentShift /= 2; } } if (!IsVertical) { plainText.Transform.Translate(rectangle.X - blackbox.X + alignmentShift, rectangle.Y - blackbox.Y * verticalScale); } else { plainText.Transform.Translate(rectangle.X - blackbox.X * horizontalScale, rectangle.Y - blackbox.Y + alignmentShift); } if (!Utils.EqualsOfFloatNumbers(1, horizontalScale) || !Utils.EqualsOfFloatNumbers(1, verticalScale)) { plainText.Transform.Scale(horizontalScale, verticalScale); } return(plainText); }
private Text CreateText(Graphics graphics) { try { return(CreateAdvancedText(Utils.EqualsOfFloatNumbers(Opacity, 1) ? Text.TrimEnd() : Common.ProcessSpanStyles(Text.TrimEnd(), stylesDict => ApplyOpacityToRichText(stylesDict, Opacity)), graphics)); } catch (GMException ex) { if (!(ex is UnknownTagException) && !(ex is InvalidStyleValueException) && !(ex is UnknownStyleNameException)) { throw; } Configuration.Logger.Warning(string.Format("Invalid rich text value in text vObject (Name - {0}, Id - {1})", Name, UniqueId), ex); return(CreateAdvancedText(HttpUtility.HtmlEncode(Text), graphics)); } }
protected override Text CreateAdvancedText(string text, Graphics graphics) { if (TextPath == null || TextPath.IsEmpty) { throw new InvalidOperationException("Path for CurvedText cannot be empty"); } if (PathStart > PathEnd || Utils.EqualsOfFloatNumbers(PathStart, PathEnd)) { throw new InvalidOperationException("Start point of path must be less than end point"); } var dpi = graphics.DpiX; FitTextToPath(dpi); var font = CreateFont(graphics); var path = GetDrawingTextPath(dpi); var pathText = new PathText(text, font) { // CurveText doesn't support underline Alignment = VOAligmnentToAdvanced(Alignment), Stretch = Stretch, Tracking = Tracking, Leading = Utils.EqualsOfFloatNumbers(0, Leading) ? font.Size * 1.2f : Leading, AutoExtend = true }; if (!Utils.EqualsOfFloatNumbers(1, HorizontalScale) || !Utils.EqualsOfFloatNumbers(1, VerticalScale)) { path.Scale(1 / HorizontalScale, 1 / VerticalScale); pathText.Transform.Scale(HorizontalScale, VerticalScale); } pathText.Path = path.ToAdvancedPath(); pathText.Start = PathStart; pathText.End = PathEnd; return(pathText); }
protected internal void FillShape(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement) { var bounds = Bounds; if (bounds.Width <= 0 || bounds.Height <= 0) { return; } if (FillColor.IsTransparent) { return; } using (var path = GetDrawingPath(graphics.DpiX)) { var fillColor = ColorManagement.ConvertColor(colorManagement, FillColor, destImageParams); fillColor = fillColor.ScaleAlpha(Opacity); graphics.FillPath(new SolidBrush(fillColor), path); } }
protected internal void StrokeShape(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement) { var bounds = Bounds; if (bounds.Width <= 0 || bounds.Height <= 0) { return; } var dpi = graphics.DpiX; var borderWidth = GetBorderWidth(dpi * graphics.Transform.Elements[0]); if (Utils.EqualsOfFloatNumbers(0, borderWidth)) { return; } using (var path = GetDrawingPath(dpi)) { var borderColor = ColorManagement.ConvertColor(colorManagement, BorderColor, destImageParams); borderColor = borderColor.ScaleAlpha(Opacity); graphics.DrawPath(new Pen(borderColor, borderWidth), path); } }
protected override Text CreateAdvancedText(string text, Graphics graphics) { var font = CreateFont(graphics); var dpi = graphics.DpiX; var rect = GetDrawingRectangle(dpi); rect.Width -= RenderingMargin * 2; rect.Height -= RenderingMargin * 2; var boundedText = new BoundedText(text, font, rect.ToRectangleF()) { Alignment = VOAligmnentToAdvanced(Alignment), Underline = Underline, Tracking = Tracking, Leading = Utils.EqualsOfFloatNumbers(0, Leading) ? font.Size * 1.2f : Leading, Paragraph = { FirstLineIndent = ParagraphSettings.FirstLineIndent, SpaceAfter = ParagraphSettings.SpaceAfter, SpaceBefore = ParagraphSettings.SpaceBefore, OverlapLines = true }, Vertical = IsVertical }; if (!Utils.EqualsOfFloatNumbers(1, HorizontalScale) || !Utils.EqualsOfFloatNumbers(1, VerticalScale)) { var rectangle = new RotatedRectangleF(boundedText.Rectangle); rectangle.Scale(1 / HorizontalScale, 1 / VerticalScale); boundedText.Rectangle = rectangle.ToRectangleF(); boundedText.Transform.Scale(HorizontalScale, VerticalScale); } if (!string.IsNullOrEmpty(text)) { ExtendRectangle(boundedText, graphics); } var rectHeight = rect.Height; var textHeight = boundedText.GetBlackBox().Height; var verticalOffset = 0f; switch (VerticalAlignment) { case TextVerticalAlignment.Center: verticalOffset = (rectHeight - textHeight) / 2 - RenderingMargin; break; case TextVerticalAlignment.Bottom: verticalOffset = rectHeight - textHeight - RenderingMargin; break; } if (verticalOffset > 0) { if (!Utils.EqualsOfFloatNumbers(1, VerticalScale)) { verticalOffset *= 1 / VerticalScale; } var rectangle = boundedText.Rectangle; rectangle.Y += verticalOffset; rectangle.Height -= verticalOffset; boundedText.Rectangle = rectangle; } var wrappingPath = GetWrappingPath(dpi); if (wrappingPath.Points.Count > 0) { boundedText.WrappingPaths.Add(wrappingPath); } return(boundedText); }
internal override void Draw(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement) { FillShape(graphics, destImageParams, colorManagement); StrokeShape(graphics, destImageParams, colorManagement); }
protected abstract Text CreateAdvancedText(string text, Graphics graphics);
internal abstract void Draw(Graphics graphics, IImageParams destImageParams, ColorManagement colorManagement);