protected override Text CreateAdvancedText(string text, AdvancedDrawing.Graphics graphics) { var font = CreateFont(graphics); var dpi = graphics.DpiX; var pathBoundedText = new PathBoundedText(text, font) { 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 }; foreach (var boundingPath in GetTransformedPaths().Select(p => p.ToAdvancedPath())) { using (var matrix = new Matrix()) { if (!Utils.EqualsOfFloatNumbers(dpi, 72)) { matrix.Scale(dpi / 72, dpi / 72, MatrixOrder.Append); } if (!Utils.EqualsOfFloatNumbers(1, HorizontalScale) || !Utils.EqualsOfFloatNumbers(1, VerticalScale)) { matrix.Scale(1 / HorizontalScale, 1 / VerticalScale, MatrixOrder.Append); } boundingPath.ApplyTransform(matrix); } pathBoundedText.BoundingPaths.Add(boundingPath); } if (!Utils.EqualsOfFloatNumbers(1, HorizontalScale) || !Utils.EqualsOfFloatNumbers(1, VerticalScale)) { pathBoundedText.Transform.Scale(HorizontalScale, VerticalScale); } var wrappingPath = GetWrappingPath(dpi); if (wrappingPath.Points.Count > 0) { pathBoundedText.WrappingPaths.Add(wrappingPath); } return(pathBoundedText); }
/// <summary> /// Creates a text object. /// </summary> private static PathBoundedText CreateText(float fontSize, Graphics graphics) { var str = "Since 2001, Aurigma have helped software developers add imaging functionality to their applications in a variety of industries. Our image processing Software Development Kit for .NET, Graphics Mill, is a truly powerful product we are proud to have developed."; var text = new PathBoundedText(str, graphics.CreateFont("Verdana", fontSize)); var bounds = new Path(); bounds.DrawEllipse(0, 0, graphics.Width, graphics.Height); text.BoundingPaths.Add(bounds); return(text); }
/// <summary> /// Draw text which flows from one area to another /// </summary> private static void DrawPathBoundedText() { using (var bitmap = new Bitmap(600, 300, PixelFormat.Format24bppRgb, RgbColor.White)) using (var graphics = bitmap.GetAdvancedGraphics()) { var dummyText = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " + "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim " + "veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo " + "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum " + "dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, " + "sunt in culpa qui officia deserunt mollit anim id est laborum."; var boundingPath = new Path(); var pathBoundedText = new PathBoundedText(dummyText, graphics.CreateFont("Verdana", 18f), new SolidBrush(RgbColor.Black)); // Adding text areas. When the first text area runs out of space, // text will automatically flow to the next one. var boundingPath1 = new Path(); boundingPath1.DrawRectangle(20, 20, 260, 260); pathBoundedText.BoundingPaths.Add(boundingPath1); var boundingPath2 = new Path(); boundingPath2.DrawRectangle(320, 20, 260, 260); pathBoundedText.BoundingPaths.Add(boundingPath2); // Adding paths which you need to wrap with the text var wrappingPath = new Path(); wrappingPath.DrawEllipse(200, 100, 200, 100); pathBoundedText.WrappingPaths.Add(wrappingPath); graphics.DrawText(pathBoundedText); // Drawing frames around text blocks (for demonstration purposes) graphics.FillPath(new SolidBrush(RgbColor.LightGreen), wrappingPath); var pen = new Pen(RgbColor.Red); graphics.DrawPath(pen, boundingPath1); graphics.DrawPath(pen, boundingPath2); graphics.DrawLine(new Pen(RgbColor.Blue, 2f), 280f, 280f, 320f, 20f); bitmap.Save("../../../../_Output/DrawPathBoundedText.png"); } }