iTextSharpは.Net環境でPDFを扱うのに便利なツールです。既存のPDFファイルにページ番号とか任意の文字列を追加する必要が出てきたので使っていたのですが、フォント指定でいろいろと嵌ってしまったので、覚え書きを兼ねて。
iTextSharpでフォント指定をする方法は、直接フォントのフォントファイルを参照する方法と、FontFactoryクラスを使用する方法があります。
私が嵌ったのはFontFactoryクラスを使用する方法を使ったときで、原因を端的に言うとフォントファイルの登録を忘れていました。
フォントファイルの登録は、ファイル毎に登録する方法がいろいろとかかれていますが、フォントの入っているディレクトリを指定することでも出来ます(こっちの方が一回で済む)。
システムフォントを使えるようにするには、↓のようにRegisterDirectoryメソッド(引数はフォルダ名 as String)を使えばOKです。
FontFactory.RegisterDirectory(Environment.SystemDirectory.Replace("system32", "fonts"))
上記で登録した後で
Dim iSize as Integer = 10 'フォントサイズ Dim font As iTextSharp.text.Font font = FontFactory.GetFont("MS Gothic", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, iSize)
とすればフォントを指定できますのでご参考に。
なお、フォント名は日本語でも大丈夫だとは思いますが、他で嵌ってたので英語名で指定しています。
フォント名(日本語・英語)の列挙は下記で可能です。
Dim fc As Text.InstalledFontCollection fc = New Text.InstalledFontCollection Dim ffs As FontFamily() ffs = fc.Families Dim iCult As Integer = System.Globalization.CultureInfo.GetCultureInfo("en-us").LCID Dim sJp, sEn As String For Each ff As FontFamily In ffs sJp = ff.Name '日本語名 sEn = ff.GetName(iCult) '英語名 Next
<参考>
この記事を書くにあたって下記のサイトを参考にさせていただきました。ありがとうございます。
・iTextSharpの日本語について~
・iTextSharp のマニュアル
・iTextSharpを利用して.NETでPDF帳票を出力する(CodeZine)
・日本語フォント名から英語フォント名を取得する