はじめに
C#でPDF生成を行う際に、日本語フォントで正常に表示することが出来なかったので、
PDFSharpを使用して日本語フォントを正しく表示するための設定方法について説明します。
実行環境
実行環境は以下となります。
- .NET Framework 4.7.2
- PDFSharp 1.50.5147
PDFSharpでの日本語フォントの設定
PDFSharpでは、以下の手順を実行することで日本語フォントの正しい表示を実現できます。
- 日本語フォントをプロジェクトに追加します。フォントファイル(例:
ipaexm.ttf
)を用意してください。 -
FontResolver
クラスを作成します。以下に修正後のコードを示します。
using System.IO;
using PdfSharp.Fonts;
public class FontResolver : IFontResolver
{
private readonly string _fontPath;
public FontResolver()
{
_fontPath = Path.Combine(Directory.GetCurrentDirectory(), "Fonts", "ipaexm.ttf");
}
public byte[] GetFont(string faceName)
{
using (var fontStream = File.OpenRead(_fontPath))
{
var fontData = new byte[fontStream.Length];
fontStream.Read(fontData, 0, fontData.Length);
return fontData;
}
}
public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
{
return new FontResolverInfo(familyName);
}
}
修正後のコードでは、FontResolver
クラスが使用されます。このクラスは、IFontResolver
インターフェースを実装し、日本語フォントのパスを指定して読み込む役割を果たします。
- PDF生成のコードで、
FontResolver
クラスを使用して日本語フォントを設定します。以下に例を示します。
// PDF生成のコード
var fontResolver = new FontResolver(); // FontResolverのインスタンスを作成
GlobalFontSettings.FontResolver = fontResolver; // PDFSharpのフォント解決にFontResolverを設定
// ここからは通常のPDF生成処理
var document = new PdfDocument();
var page = document.AddPage();
var gfx = XGraphics.FromPdfPage(page);
XFont font = new XFont("IPAex明朝", 12, XFontStyle.Regular);
// 使用する日本語フォントを指定
gfx.DrawString("テキストの表示例", font, XBrushes.Black, new XRect(50, 50, page.Width - 100, page.Height - 100), XStringFormats.Center); // テキストを表示
document.Save("output.pdf");
上記のコードでは、XFont
クラスを使用して日本語フォントを指定し、gfx.DrawString
メソッドで日本語テキストを表示しています。フォント名とサイズ、スタイルを適宜変更してください。
以上の手順を実行することで、PDFSharpで日本語フォントを正しく表示し、テキストを表示することができます。
まとめ
C#でのPDF生成において日本語フォントを正常に表示するにはそれ用の設定が必要でした。
上記コードを使用することにより、PDF生成において正常に日本語フォントが利用され、
正常に日本語テキストが表示することが出来ました。