CharacterFormatting.cs
// 完毕:
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
{
// 演示 GcDocs.Pdf 中字符格式化的基础知识。
//
// GcDocs.Pdf 中的字符格式是通过 GrapeCity.Documents.Text.TextFormat 类完成的。
// 具有所需格式选项的该类的实例
// 被传递给 GcDocs.Pdf 中可用的大多数文本渲染方法(例如 DrawString)。
// 在同一段落中呈现具有不同字符格式的文本
// 是通过使用 TextLayout/DrawTextLayout 来完成的。
// 另请参阅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. 必须在 TextFormat 上设置的唯一强制属性是 Font:
var tf = new TextFormat() { Font = StandardFonts.Times };
g.DrawString("1. 必须始终在 TextFormat 上设置的唯一强制属性是 Font。" +
"", tf, ip);
ip.Y += vStep * 2;
// 2. 提供标准字体属性:
tf.Underline = true;
tf.Strikethrough = true;
tf.FontSize = 10;
g.DrawString("2.标准属性可用,这里我们打开下划线和删除线,并将FontSize设置为10。", tf, ip);
ip.Y += vStep;
// 3. TextFormat.FontStyle 允许您模拟粗体和/或斜体样式
// 使用常规字体(另请参阅BoldItalicEmulation):
tf.Underline = tf.Strikethrough = false;
tf.FontStyle = GCTEXT.FontStyle.BoldItalic;
tf.FontSize = 12;
g.DrawString("3. 使用TextFormat.FontStyle.BoldItalic 模拟粗体斜体样式。", tf, ip);
ip.Y += vStep;
// 4.其他属性包括前景色和背景色:
tf.FontStyle = GCTEXT.FontStyle.Regular;
tf.ForeColor = Color.DarkSlateBlue;
tf.BackColor = Color.PaleGreen;
g.DrawString("4. 使用TextFormat.ForeColor 和TextFormat.BackColor 为文本着色。", tf, ip);
ip.Y += vStep;
// 5. 同一段落中可以混合使用不同的文本格式。
// 为此,必须使用 TextLayout 和 GcPdfGraphics.DrawTextLayout:
TextLayout tl = g.CreateTextLayout();
tl.Append("5. 不同的文本格式可以很容易地混合在同一个段落中",
new TextFormat() { Font = StandardFonts.Times });
tl.Append("当使用 TextLayout 构建段落时",
new TextFormat() { Font = StandardFonts.TimesBold, BackColor = Color.PaleTurquoise });
tl.Append("如本示例段落所示。",
new TextFormat() { Font = StandardFonts.HelveticaBoldItalic, ForeColor = Color.DarkOrange });
tl.Append("TextFormat 上还有各种其他选项,包括",
new TextFormat() { Font = StandardFonts.Times, ForeColor = Color.DarkSlateBlue });
tl.Append("字形提前系数",
new TextFormat() { Font = StandardFonts.TimesBoldItalic, Underline = true });
tl.Append("(扩展字形",
new TextFormat() { Font = StandardFonts.Times, GlyphAdvanceFactor = 1.5f, ForeColor = Color.BlueViolet });
tl.Append("或者将它们放在一起),",
new TextFormat() { Font = StandardFonts.Times, GlyphAdvanceFactor = 0.8f, ForeColor = Color.BlueViolet });
tl.Append("横向偏移",
new TextFormat() { Font = StandardFonts.TimesBoldItalic, Underline = true });
tl.Append("(将字形降低到基线以下,",
new TextFormat() { Font = StandardFonts.Times, TransverseOffset = -5, ForeColor = Color.MediumVioletRed });
tl.Append("或将它们提高到其上方)",
new TextFormat() { Font = StandardFonts.Times, TransverseOffset = 5, ForeColor = Color.MediumVioletRed });
tl.Append("等等(例如,可以通过 TextFormat.FontFeatures 访问特定字体的功能)。",
new TextFormat() { Font = StandardFonts.Times, FontFeatures = new FontFeature[] { new FontFeature(FeatureTag.clig) } });
// 对于此示例,我们仅设置文本布局的最大宽度,
// 在真实的应用程序中,您可能至少也会设置 MaxHeight:
tl.MaxWidth = page.Size.Width - In * 2;
tl.PerformLayout(true);
g.DrawTextLayout(tl, ip);
// 完毕:
doc.Save(stream);
return doc.Pages.Count;
}
}
}