CharacterFormatting.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.Drawing; using GrapeCity.Documents.Pdf; using GrapeCity.Documents.Text; using GCTEXT = GrapeCity.Documents.Text; using GCDRAW = GrapeCity.Documents.Drawing; namespace DsPdfWeb.Demos.Basics { // Demonstrates the basics of character formatting in DsPdf. // // Character formatting in DsPdf is done via GrapeCity.Documents.Text.TextFormat class. // An instance of that class with the required formatting options // is passed to most text rendering methods available in DsPdf (e.g. DrawString). // Rendering text with different character formatting in the same paragraph // is done by using TextLayout/DrawTextLayout. // See also TextRendering, MultiFormattedText, ParagraphAlign, // ParagraphFormatting, TextAlign. public class CharacterFormatting { public int CreatePDF(Stream stream) { var doc = new GcPdfDocument(); var page = doc.NewPage(); var g = page.Graphics; const float In = 72f, vStep = In / 2; var ip = new PointF(In, In); // 1. The only mandatory property that must be set on a TextFormat is Font: var tf = new TextFormat() { Font = StandardFonts.Times }; g.DrawString("1. The only mandatory property that must always be set on a TextFormat is Font." + "Even FontSize is optional, and defaults to 12pts.", tf, ip); ip.Y += vStep * 2; // 2. Standard font properties are available: tf.Underline = true; tf.Strikethrough = true; tf.FontSize = 10; g.DrawString("2. Standard properties are available, here we turn Underline and Strikethrough on, and set FontSize to 10.", tf, ip); ip.Y += vStep; // 3. TextFormat.FontStyle allows emulating bold and/or italic styles // using a regular font (see also BoldItalicEmulation): tf.Underline = tf.Strikethrough = false; tf.FontStyle = GCTEXT.FontStyle.BoldItalic; tf.FontSize = 12; g.DrawString("3. Using TextFormat.FontStyle.BoldItalic to emulate bold italic style.", tf, ip); ip.Y += vStep; // 4. Other properties include foreground and background colors: tf.FontStyle = GCTEXT.FontStyle.Regular; tf.ForeColor = Color.DarkSlateBlue; tf.BackColor = Color.PaleGreen; g.DrawString("4. Using TextFormat.ForeColor and TextFormat.BackColor to colorize the text.", tf, ip); ip.Y += vStep; // 5. Different text formats may be mixed in the same paragraph. // For that, TextLayout and GcPdfGraphics.DrawTextLayout must be used: TextLayout tl = g.CreateTextLayout(); tl.Append("5. Different text formats can be easily mixed in the same paragraph", new TextFormat() { Font = StandardFonts.Times }); tl.Append("when the paragraph is built with TextLayout", new TextFormat() { Font = StandardFonts.TimesBold, BackColor = Color.PaleTurquoise }); tl.Append("as this sample paragraph shows.", new TextFormat() { Font = StandardFonts.HelveticaBoldItalic, ForeColor = Color.DarkOrange }); tl.Append("Various other options are available on TextFormat, including", new TextFormat() { Font = StandardFonts.Times, ForeColor = Color.DarkSlateBlue }); tl.Append(" GlyphAdvanceFactor ", new TextFormat() { Font = StandardFonts.TimesBoldItalic, Underline = true }); tl.Append(" (spreading glyphs out ", new TextFormat() { Font = StandardFonts.Times, GlyphAdvanceFactor = 1.5f, ForeColor = Color.BlueViolet }); tl.Append("or putting them closer together), ", new TextFormat() { Font = StandardFonts.Times, GlyphAdvanceFactor = 0.8f, ForeColor = Color.BlueViolet }); tl.Append("TransverseOffset", new TextFormat() { Font = StandardFonts.TimesBoldItalic, Underline = true }); tl.Append(" (lowering the glyphs below the base line, ", new TextFormat() { Font = StandardFonts.Times, TransverseOffset = -5, ForeColor = Color.MediumVioletRed }); tl.Append("or raising them above it)", new TextFormat() { Font = StandardFonts.Times, TransverseOffset = 5, ForeColor = Color.MediumVioletRed }); tl.Append(" and more (for example, specific fonts' features are accessible via TextFormat.FontFeatures).", new TextFormat() { Font = StandardFonts.Times, FontFeatures = new FontFeature[] { new FontFeature(FeatureTag.clig) } }); // For this sample, we just set the max width of the text layout, // in a real app you would probably set at least the MaxHeight too: tl.MaxWidth = page.Size.Width - In * 2; tl.PerformLayout(true); g.DrawTextLayout(tl, ip); // Done: doc.Save(stream); return doc.Pages.Count; } } }