Hyphenation.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 shows how to hyphenate text that contains soft hyphen characters (0x00AD). // Breaks will be inserted at soft hyphen positions (if they are present in the text) // if TextLayout.WrapMode is set to WordWrap. Two properties are provided to control // hyphenation: // - TextLayout.SoftHyphenReplacementCharCode: specifies the character used as replacement // for soft hyphen when breaking words across lines. By default this property is 0x002D // (the Unicode hyphen-minus character). Setting this property to 0 breaks words without // showing any visible hyphen character. Setting it to -1 prevents breaking words at soft // hyphens). // - TextLayout.LinesBetweenConsecutiveHyphens: specifies the minimum number of non- // hyphenated lines between lines ending in a hyphen. By default this property is zero. public class Hyphenation { public int CreatePDF(Stream stream) { // The online hypho-o tool // was used to insert soft hyphens in the sample text from WordCharWrap: var str = "Lose noth­ing in your doc­u­ments! Grape­City Doc­u­ments for PDF " + "in­cludes text and para­graph format­ting, spe­cial char­ac­ters, " + "mul­tiple lan­guages, RTL sup­port, ver­tic­al and ro­tated text " + "on all sup­por­ted plat­forms."; // Replace HTML soft hyphens with Unicode ones: str = str.Replace("­", "\u00AD"); var doc = new GcPdfDocument(); var page = doc.NewPage(); var g = page.Graphics; var tl = g.CreateTextLayout(); tl.Append(str); tl.DefaultFormat.Font = StandardFonts.Times; tl.DefaultFormat.FontSize = 12; tl.MaxWidth = 72 * 3; // By default 0x002D (hyphen-minus) will be used as the hyphenation character // when breaking a line at a soft hyphen (0x00AD): tl.PerformLayout(true); var dy = tl.Lines[0].Height + 72 / 16; var rc = new RectangleF(72, 72 + dy, tl.MaxWidth.Value, 72 * 1.4F); g.DrawString("Default hyphenation:", tl.DefaultFormat, new PointF(rc.Left, rc.Top - dy)); g.DrawTextLayout(tl, rc.Location); g.DrawRectangle(rc, Color.CornflowerBlue); rc.Offset(0, 72 * 2); // This will avoid hyphenating two consecutive lines: tl.LinesBetweenConsecutiveHyphens = 1; // Changing hyphenation options requires RecalculateGlyphs(): tl.PerformLayout(true); g.DrawString("LinesBetweenConsecutiveHyphens: 1", tl.DefaultFormat, new PointF(rc.Left, rc.Top - dy)); g.DrawTextLayout(tl, rc.Location); g.DrawRectangle(rc, Color.CornflowerBlue); rc.Offset(0, 72 * 2); // Reset previous setting: tl.LinesBetweenConsecutiveHyphens = 0; // Prevent hyphenating words at all: tl.SoftHyphenReplacementCharCode = -1; // Changing hyphenation options requires RecalculateGlyphs(): tl.PerformLayout(true); g.DrawString("SoftHyphenReplacementCharCode: -1", tl.DefaultFormat, new PointF(rc.Left, rc.Top - dy)); g.DrawTextLayout(tl, rc.Location); g.DrawRectangle(rc, Color.CornflowerBlue); // Done: doc.Save(stream); return doc.Pages.Count; } } }