EUDC.cs
//
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace DsPdfWeb.Demos.Basics
{
// 独自の EUDC フォント(.tte)にて、私用領域(PUA)の Unicode 文字をレンダリングする方法を示します。
public class EUDC
{
public int CreatePDF(Stream stream)
{
// EUDC コード文字と通常の文字(& と !)を組み合わせたテスト用文字列。0xE620 0xE621 0xE622 0xE624 amp; 0xE623 !
const string tstr = "&!";
// 設定。
var doc = new GcPdfDocument();
var page = doc.NewPage();
var g = page.Graphics;
var tf = new TextFormat() { FontSize = 14 };
var rc = Common.Util.AddNote(
"独自の EUDC フォント(.tte)を使用して、私用領域(PUA)の Unicode 文字をレンダリングする方法を示しています。\n" +
"GrapeCity.Documents.Text.Fontは、EUDC .tte ファイルから作成され、" +
"Font.AddEudcFont() メソッドを使用して1つ以上のフォントにリンクさせることができます。",
page);
const float dy = 36;
var ip = new PointF(rc.X, rc.Bottom + dy / 2);
// FontCollection を使用すると、ファミリ名でフォントを取得できます。
var fc = new FontCollection();
// グラフィックスの MeasureString/DrawString メソッドがフォールバックフォントを
// 検出できるように、フォントコレクションをグラフィックスに割り当てます。
g.FontCollection = fc;
// 標準のフォントを FontCollection に登録します。
fc.RegisterFont(Path.Combine("Resources", "Fonts", "arial.ttf"));
fc.RegisterFont(Path.Combine("Resources", "Fonts", "times.ttf"));
fc.RegisterFont(Path.Combine("Resources", "Fonts", "ipag.ttc"));
fc.RegisterFont(Path.Combine("Resources", "Fonts", "msgothic.ttc"));
fc.RegisterFont(Path.Combine("Resources", "Fonts", "YuGothR.ttc"));
// フォントコレクションにMS Gothicをフォールバックとして使用するように指示します。
fc.AppendFallbackFonts(fc.FindFamilyName("MS Gothic"));
// Arial フォントを使用すると、適切なグリフが Aria lに存在しないため、テスト文字列が空の長方形としてレンダリングされます。
tf.Font = fc.FindFamilyName("Arial", false, false);
g.DrawString($"Arial: {tstr} (EUDCフォントはまだリンクされていません)", tf, ip);
ip.Y += dy;
// 2種類の EUDC フォントを読み込みます。
var eudcF0 = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "Eudc0.tte"));
var eudcF1 = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "Eudc1.tte"));
// 1つの EUDC フォントを Arial にリンク - これにより、Arial で描画された文字列において、EUDC の文字はこのフォントで検索されます。
var font = fc.FindFamilyName("Arial");
font.AddEudcFont(eudcF0);
// MS Gothic も同様に。
font = fc.FindFamilyName("MS Gothic");
font.AddEudcFont(eudcF1);
// 別の EUDC フォントを Yu Gothic にリンク。
font = fc.FindFamilyName("Yu Gothic");
font.AddEudcFont(eudcF1);
// 独自の EUDC フォントがリンクされているフォントを使用して、EUDC 文字列を描画します。
tf.Font = fc.FindFamilyName("Arial", false, false);
g.DrawString($"Arial, Eudc0.tte をリンク: {tstr}", tf, ip);
ip.Y += dy;
tf.Font = fc.FindFileName("times.ttf");
g.DrawString($"Times, MS Gothic 経由のフォールバック: {tstr}", tf, ip);
ip.Y += dy;
tf.Font = fc.FindFamilyName("MS Gothic");
g.DrawString($"MS Gothic, Eudc1.tte をリンク: {tstr}", tf, ip);
ip.Y += dy;
tf.Font = fc.FindFamilyName("Yu Gothic");
g.DrawString($"Yu Gothic, Eudc1.tte をリンク: {tstr}", tf, ip);
ip.Y += dy;
// FontCollection はファミリ名によるフォント検索のようないくつかのサービスを追加しますが、
// EUDC フォントはコレクションにないフォントにリンクできます。
font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "Gabriola.ttf"));
font.AddEudcFont(eudcF0);
tf.Font = font;
g.DrawString($"Gabriola Font, Eudc0.tte をリンク: {tstr}", tf, ip);
ip.Y += dy;
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}