TextTrimming.cs
 // // This code is part of Document Solutions for PDF demos. // Copyright (c) MESCIUS inc. All rights reserved. // using System; using System.IO; using System.Drawing; using GrapeCity.Documents.Pdf; using GrapeCity.Documents.Text; using GrapeCity.Documents.Drawing; namespace DsPdfWeb.Demos.Basics { // This sample demonstrates how to display ellipsis // if a string does not fit in the allocated space. public class TextTrimming { public int CreatePDF(Stream stream) { var doc = new GcPdfDocument(); var page = doc.NewPage(); var g = page.Graphics; const float In = 72; var str = "This is a long line of text which does not fit in the allocated space."; var wid = In * 4; var dy = 0.3f; var rc = Common.Util.AddNote( "TextLayout allows you to display ellipsis (or other character) " + "at the end of a text line that did not fit in the allocated space.\n" + "To use trimming, set TrimmingGranularity to Character or Word " + "(the default is None). Trimming will kick in if WrapMode is NoWrap, " + "and the text is too long. Wrapped text may also display trimming if " + "the layout width is too narrow to fit a single word.\n" + "Below are examples of text untrimmed, trimmed to character and to word. " + "The next line demonstrates a different trimming character (tilde in this case). " + "The line before last shows how to trim text (respecting TrimmingGranularity) " + "without adding any trimming character. " + "Finally the last line shows the use of DelimiterCharCode and DelimiterCharCount " + "properties to shorten file paths.", page); var top = rc.Bottom + 36; var ip = new PointF(rc.Left, top); var tl = g.CreateTextLayout(); tl.DefaultFormat.Font = StandardFonts.Times; tl.DefaultFormat.FontSize = 12; tl.MaxWidth = wid; tl.WrapMode = WrapMode.NoWrap; // TrimmingGranularity is None by default: tl.Append(str); tl.PerformLayout(true); g.DrawTextLayout(tl, ip); ip.Y += tl.ContentHeight + dy; // Character trimming: tl.TrimmingGranularity = TrimmingGranularity.Character; // NOTE that the recalculateGlyphsBeforeLayout parameter to PerformLayout // may be false after the first call, as the text/font has not changed: tl.PerformLayout(false); g.DrawTextLayout(tl, ip); ip.Y += tl.ContentHeight + dy; // Word trimming: tl.TrimmingGranularity = TrimmingGranularity.Word; tl.PerformLayout(false); g.DrawTextLayout(tl, ip); ip.Y += tl.ContentHeight + dy; // tl.EllipsisCharCode is HorizontalEllipsis (0x2026) by default. // Change it to a tilde: tl.EllipsisCharCode = 0x007E; tl.PerformLayout(false); g.DrawTextLayout(tl, ip); ip.Y += tl.ContentHeight + dy; // We can also set tl.EllipsisCharCode to 0 to trim text // without rendering any trimming character: tl.EllipsisCharCode = 0; tl.PerformLayout(false); g.DrawTextLayout(tl, ip); ip.Y += tl.ContentHeight + dy; // Another interesting feature is provided by the pair of // DelimiterCharCode and DelimiterCharCount properties. // These would typically be used to shorten long paths // preserving a specified number of parts at the string's tail: tl.Clear(); tl.EllipsisCharCode = 0x2026; tl.Append(@"c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"); tl.DelimiterCharCode = '\\'; tl.DelimiterCharCount = 2; tl.PerformLayout(true); g.DrawTextLayout(tl, ip); ip.Y += tl.ContentHeight + dy; g.DrawRectangle(new RectangleF(rc.Left, top, wid, ip.Y - top), Color.OrangeRed); // Done: doc.Save(stream); return doc.Pages.Count; } } }