SubSuperScript.cs
//
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Text.RegularExpressions;
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
{
// このサンプルは、下付き文字と上付き文字を描画する方法を示します。
public class SubSuperScript
{
public int CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var page = doc.NewPage();
var g = page.Graphics;
var rc = Common.Util.AddNote(
"上付き/下付き文字を指定するサンプルです。" +
"TextFormat.Subscript および TextFormat.Superscript プロパティを使用します。" +
"ランダムな文字列で段落を描画し、指定した文字のみを上付きまたは下付き文字として描画します。",
page);
// ランダムな段落を取得します。
var para = Common.Util.getString_ja(1, 1, 1);
// 段落から特定の文字列を抜き出します。
const string sub = "負け";
const string super = "いい";
var frags = Regex.Split(para, $"({sub})|({super})");
var font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "YuGothR.ttc"));
// 下付き文字と上付き文字のテキスト書式を作成します。
var tfSub = new TextFormat() { Font = font, FontSize = 12, Subscript = true };
var tfSuper = new TextFormat(tfSub) { Subscript = false, Superscript = true };
// 特定の文字列のみ別の書式を使用して、TextLayout にテキストを追加します。
var tl = g.CreateTextLayout();
tl.DefaultFormat.Font = font;
tl.DefaultFormat.FontSize = 12;
foreach (var frag in frags)
{
if (frag == sub)
tl.Append(frag, tfSub);
else if (frag == super)
tl.Append(frag, tfSuper);
else
tl.Append(frag);
}
// 化学式の表記
tl.AppendParagraphBreak();
tl.Append("化学式は、下付き文字を指定して表現できます。\n");
tl.AppendLine();
var tfChem = new TextFormat() { Font = font, FontSize = 16};
const string strchem = @"グルタミン酸:CH3CH2OH";
foreach (var frag in strchem.ToCharArray())
{
if (int.TryParse(frag.ToString(), out var number))
tl.Append(frag.ToString(), tfSub);
else
tl.Append(frag.ToString(),tfChem);
}
// レイアウトプロパティを設定してテキストを描画します。
tl.MaxWidth = page.Size.Width;
tl.MaxHeight = page.Size.Height - rc.Height;
tl.MarginAll = 72;
tl.MarginTop = rc.Bottom + 36;
tl.PerformLayout(true);
g.DrawTextLayout(tl, PointF.Empty);
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}