UnicodeRanges.cs
//
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;
namespace DsPdfWeb.Demos.Basics
{
// このサンプルでは、各システムフォントで使用できる Unicode 範囲を示します。
public class UnicodeRanges
{
public int CreatePDF(Stream stream)
{
// 設定。
var doc = new GcPdfDocument();
var tl = new TextLayout(72)
{
MaxWidth = doc.PageSize.Width,
MaxHeight = doc.PageSize.Height,
MarginAll = 72,
};
tl.DefaultFormat.FontSize = 7;
var tfH = new TextFormat() { Font = StandardFonts.TimesBold, FontSize = 12 };
var tfP = new TextFormat() { Font = StandardFonts.Times, FontSize = 11 };
// すべてのシステムフォントをループし、各フォントによって
// 提供される Unicode 範囲をリストします。
foreach (var font in FontCollection.SystemFonts)
{
tl.AppendLine($"{font.FontFileName} [{font.FullFontName}] [{font.FontFamilyName}]", tfH);
var shot = font.CreateFontTables(TableTag.OS2);
tl.AppendLine(shot.GetUnicodeRanges(), tfP);
tl.AppendLine();
}
// PaginatedText サンプルで示すように、TextLayout を分割して描画します。
var to = new TextSplitOptions(tl)
{
MinLinesInFirstParagraph = 2,
MinLinesInLastParagraph = 2
};
tl.PerformLayout(true);
while (true)
{
var splitResult = tl.Split(to, out TextLayout rest);
doc.Pages.Add().Graphics.DrawTextLayout(tl, PointF.Empty);
if (splitResult != SplitResult.Split)
break;
tl = rest;
}
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}