[]
DioDocs for PDF では、GrapeCity.Documents.Drawing 名前空間のメンバである GcGraphics クラスを使用してテキストをレンダリングする際に、主に次の 2 つの方法が用意されています。
TextLayout/DrawTextLayout メソッドを使用:DioDocs for PDF でテキストをレンダリングする際は、主に DrawTextLayout メソッドを使用します。これは、TextLayout クラスのインスタンスを使用して、指定された場所にテキストレイアウトを描画します。
MeasureString/DrawString のペアを使用:DrawString メソッドを MeasureString メソッドと共に使用して、ページの任意の場所に短い文字列をレンダリングすることができます(文字列が利用可能なスペースに収まる場合)。
さらに、DioDocs for PDF には、テキストを操作する際に次の機能をサポートする GrapeCity.Documents.Text 名前空間も用意されています。
テキストの配置
DioDocs for PDF の TextAlignment プロパティは、テキストを読み方向軸に沿って水平に配置する方法を制御します。このプロパティは、TextAlignment 列挙の値を受け取ります。
テキストのレイアウト
DioDocs for PDF の TextLayout クラスは、同じ書式設定を持つテキストから成る 1 つ以上の段落を示します。このクラスを直接使用して、テキストを形成およびレイアウトできます。
テキストの書式設定
DioDocs for PDF の TextFormat クラスは、テキストを書式設定し、フォントの色と装飾を設定します。Font は、テキスト書式に設定する必要がある必須プロパティです。また、DioDocs for PDF の TextLayout および GcPdfGraphics.DrawTextLayout メソッドを使用して、指定した位置にテキストレイアウトを描画することで、同じ段落に異なるテキスト書式を混在させることもできます。
テキストの回転
DioDocs for PDF では、PDF ドキュメント内のテキストを回転させることができます。それには、GcPdfGraphics クラスの Transform プロパティを使用して、テキスト文字列を回転させます。
垂直テキスト
DioDocs for PDF では、LeftToRight および RightToLeft モードで、垂直テキストをレンダリングすることができます。ライブラリには、テキストの向きを設定できる TextLayout クラスの FlowDirection プロパティが用意されています。また、中国語、日本語、韓国語などの東アジア言語の文字を垂直方向にレンダリングできます。
テキストストロークと塗りつぶし
DioDocs for PDFでは、TextFormat クラスの Hollow および FillBrush プロパティを使用して、ストロークグリフのアウトラインでテキストをレンダリングし、単色またはグラデーションブラシでグリフを塗りつぶすことができます。
テキストのトリミングと折り返し
DioDocs for PDFでは、TextLayout クラスの TrimmingGranularity および WrapMode プロパティを使用して、PDF ドキュメント内にテキストを単語単位と文字単位でトリミングして、折り返すことができます。これにより、割り当てられた領域に収まらない文字列の末尾に省略記号や他の記号を表示できます。
下付き文字および上付き文字
DioDocs for PDFでは、上付き文字と下付き文字のテキストを表示させることができます。TextFormat クラスの Subscript およびSuperscript プロパティを使用して、テキストを下付き文字(例えば、H2Oの2)と、上付き文字(例えば、x3の3)として設定できます。
段落の配置と書式設定
段落の配置と書式設定を行うためのすべてのプロパティは、DioDocs for PDF の TextLayout クラスで提供されています。このクラスには、フローの方向軸に沿って段落の配置を設定する ParagraphAlignment プロパティが用意されています。ParagraphAlignment プロパティは、ParagraphAlignment 列挙の値を受け取ります。また、TextLayout クラスの FirstLineIndent プロパティと LineSpacingScaleFactor プロパティを使用して、行のインデントや間隔などの基本的な段落の書式設定オプションを段落に適用できます。

DioDocs for PDF を使用して PDF ドキュメント内にテキストをレンダリングするには、GcGraphics クラスの DrawString メソッドを使用するか、TextLayout クラスを使用します。TextLayout クラスを使用する場合は、Append メソッドを使用してレイアウトを作成し、PerformLayout メソッドを呼び出してレンダリングを準備する必要があります。最後に、GcGraphics クラスの DrawTextLayout メソッドを呼び出して、ドキュメント内にテキストをレンダリングします。
public void CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var page = doc.NewPage();
var g = page.Graphics;
const float In = 150;
PointF ip = new PointF(72, 72);
var tl = g.CreateTextLayout();
tl.DefaultFormat.Font = StandardFonts.Times;
tl.DefaultFormat.FontSize = 12;
// TextFormatクラスは、すべてのGcPdfnoのテキストレンダリングで使用され、
// フォントやその他の文字書式を指定します
var tf = new TextFormat(tl.DefaultFormat)
{
Font = StandardFonts.Times,
FontSize = 12
};
// Appendメソッドを使用してテキストをレンダリングします
tl.Append("Turpis non ante pulvinar et massa nibh laoreet amet volutpat laoreet " +
"molestie aliquet massa ullamcorper ac nisi ante massa lobortis Massa at laoreet" +
"mauris aliquamfelis feugiat et non euismod magna eget molestie euismod elit dolor " +
"eget erat euismod laoreetPharetra sit mauris nibh molestie ac nunc proin felis" +
" erat lorem volutpat elit mi nunc magnamauris molestie tincidunt" +
" sedMassa congue nibh volutpat eget non", tf);
tl.PerformLayout(true);
g.DrawTextLayout(tl, ip);
// DrawStringメソッドを使用してテキストをレンダリングします
g.DrawString("1. サンプル文字列。", tf, new PointF(In, In));
// ドキュメントを保存します
doc.Save(stream);
}PDF ドキュメント内のテキスト配置を設定するには、TextLayout クラスの TextAlignment プロパティを使用します。このプロパティは、TextAlignment 列挙の値を受け取ります。
tl.TextAlignment = TextAlignment.Trailing;PDF ドキュメントのテキストを書式設定するには、TextFormat クラスを使用します。このクラスは、フォントなどの文字書式設定を指定するために、任意のタイプのテキストのレンダリングに使用されます。TextFormat クラスのさまざまなプロパティ(FontSize、FontStyle など)を使用して、レンダリングされるテキストに必要なテキスト書式を適用できます。
TextFormat tf = new TextFormat()
{
Font = StandardFonts.Courier,
FontSize = 14,
FontStyle = FontStyle.Bold,
ForeColor = GrapeCity.Documents.Drawing.Color.Cyan,
Language = Language.English
};PDF ドキュメント内のテキストをさまざまな角度で回転させるには
GcGraphics クラスの Transform プロパティを使用してテキストを回転させます。このプロパティは、Matrix3x2 クラスの CreateRotation メソッドによって計算された値を受け取ります。
DrawTextLayout メソッドを使用して、回転したテキストと境界四角形を描画します。
public void CreatePDF(Stream stream)
{
// 回転角度、時計回り
float angle = -45;
var doc = new GcPdfDocument();
var g = doc.NewPage().Graphics;
// テキストレイアウトを作成し、フォントとフォントサイズを選択します
TextLayout tl = g.CreateTextLayout();
tl.DefaultFormat.Font = StandardFonts.Times;
tl.DefaultFormat.FontSize = 24;
// テキストを追加し、レイアウトを実行します
tl.Append("回転したテキスト");
tl.PerformLayout(true);
// テキスト挿入ポイントは(1",1")になります
var ip = new PointF(72, 72);
// テキスト四角形を作成します
var rect = new RectangleF(ip.X, ip.Y, tl.ContentWidth, tl.ContentHeight);
// 境界線の四角形の中心付近でテキストを回転させます。
// その中心を中心に回転させます
g.Transform = Matrix3x2.CreateRotation((float)(angle * Math.PI) / 180f,
new Vector2(ip.X + tl.ContentWidth / 2, ip.Y + tl.ContentHeight / 2));
// 回転したテキストと境界の四角形を描画します
g.DrawTextLayout(tl, ip);
g.DrawRectangle(rect, Color.Black, 1);
// 回転を取り除いて境界の四角形を描画します
g.Transform = Matrix3x2.Identity;
g.DrawRectangle(rect, Color.ForestGreen, 1);
// ドキュメントを保存します
doc.Save(stream);
}DioDocs for PDFは、GcGraphicsクラスの FlowDirection プロパティを使用して垂直テキストをレンダリングすることができます。FlowDirectionプロパティは FlowDirection 列挙体の値を受け取ります。垂直テキスト配置を設定するには、このプロパティをVerticalLeftToRightまたはVerticalRightToLeftに設定します。
また、DioDocs for PDFの TextFormat クラスの RotateSidewaysCounterclockwise プロパティを使用して、横向きのテキストを反時計回りに回転することもできます。TextFormatクラスの SidewaysInVerticalText プロパティと UprightInVerticalText プロパティは、テキストを横表示または縦表示に設定します。これらのプロパティは、東アジア言語のテキスト内にラテン語のテキストをレンダリングするために使用されます。
//TextLayoutプロパティを使用して、テキストのレイアウトを垂直方向に設定します
tl.RotateSidewaysCounterclockwise = true;
tl.FlowDirection = FlowDirection.VerticalLeftToRight;
//中国語、日本語、韓国語のテキストのレイアウトを垂直方向に設定します
TextFormat tfvertical = new TextFormat()
{
UprightInVerticalText = false,
GlyphWidths = GlyphWidths.Default,
TextRunAsCluster = false,
};
tl.Append("日本語でのテスト文字列です", tfvertical);アウトラインテキストをレンダリングするには、StrokePen プロパティを使用してアウトラインを描画し、Hollow プロパティをtrueに設定します。また、塗りつぶしテキストをレンダリングするには、TextFormat クラスの FillBrush プロパティを使用します。
//アウトラインテキスト
TextFormat tf0 = new TextFormat() {
StrokePen = Color.DarkGreen,
Hollow = true,
FontSize = 48,
};
tl.AppendLine("Outline Text", tf0);
//塗りつぶしテキスト
TextFormat tf1 = new TextFormat() {
StrokePen = Color.DarkMagenta,
FillBrush = new SolidBrush(Color.Yellow),
FontSize = 48,
};
tl.AppendLine("Filled Text", tf1);割り当てられた領域に収まらない文字列を処理するには、2つの方法があります。1つ目はテキストを折り返す方法です。もう1つは、文字や単語をトリミングして末尾に省略記号などの文字を追加する方法です。TextLayout クラスの WrapMode プロパティを使用して、PDFドキュメント内にテキストを折り返すことができます。また、TextLayout クラスの TrimmingGranularity と EllipsisCharCode プロパティは、トリミングオプションを設定し、テキストの末尾に省略記号のような特定の文字を表示します。
//文字をトリミングします
tl.TrimmingGranularity = TrimmingGranularity.Character;
tl.EllipsisCharCode = 0x007E;
//WrapModeプロパティに文字単位を設定します
tl.WrapMode = WrapMode.CharWrap;PDFドキュメント内に下付き文字と上付き文字のテキストをレンダリングするには、TextFormat クラスの Subscript プロパティと Superscript プロパティを使用します。
//下付き文字を適用します
var tf = new TextFormat() {FontSize = 18};
var tfsub = new TextFormat() {Subscript = true, FontBold = true};
var tfbold = new TextFormat() {FontBold = true, FontSize = 18};
tl.Append("The chemical formula of water is ");
tl.Append("H", tfbold);
tl.Append("2", tfsub);
tl.Append("O.", tfbold);
//上付き文字を適用します
var tf = new TextFormat() {FontSize = 18};
var tfsup = new TextFormat() {Superscript = true, FontBold = true};
tl.Append("Example of a math equation : ");
tl.Append("x", tf);
tl.Append("2", tfsup);
tl.Append("+", tf);
tl.Append("y", tf);
tl.Append("2", tfsup);段落の書式設定を処理するには、TextLayout クラスのプロパティを使用して、段落の配置と書式を設定します。
public void CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var page = doc.NewPage();
var g = page.Graphics;
// デフォルトでは、GcPdfは72dpiを使用します
PointF ip = new PointF(72, 72);
var tl = g.CreateTextLayout();
tl.MaxWidth = doc.PageSize.Width;
tl.MaxHeight = doc.PageSize.Height;
tl.MarginLeft = tl.MarginTop = tl.MarginRight = tl.MarginBottom = 72;
var tf = new TextFormat(tl.DefaultFormat)
{
Font = StandardFonts.Times,
FontSize = 12,
};
// Appendメソッドを使用してテキストをレンダリングします
tl.Append("Turpis non ante pulvinar et massa nibh laoreet amet volutpat laoreet " +
"molestie aliquet massa ullamcorper ac nisi ante massa lobortis Massa at laoreet" +
"mauris aliquamfelis feugiat et non euismod magna eget molestie euismod elit dolor" +
"eget erat euismod laoreetPharetra sit mauris nibh molestie ac nunc proin felis" +
"erat lorem volutpat elit mi nunc magnamauris molestie tincidunt" +
"sedMassa congue nibh volutpat eget non", tf);
// 最初の行のオフセットを設定します
tl.FirstLineIndent = 72 / 2;
// 行間隔を設定します
tl.LineSpacingScaleFactor = 1.5f;
tl.PerformLayout(true);
g.DrawTextLayout(tl, ip);
// ドキュメントを保存します
doc.Save(stream);
}DioDocs for PDF を使用したテキストの実装の詳細については、DioDocs for PDF サンプルブラウザを参照してください。