(2)日本語フォントの利用
実は、さきほどのサンプルの「"Hello iTextSharp"」を日本語に変えても正しく表示されません。日本語を正しく表示させるためには、日本語を表示できるフォントを設定する必要があるためです。
フォントを適用するコード
次の日本語フォントを利用したPDFを生成してみましょう。
- MSゴシック(40ポイント)
- MS Pゴシック(太字で32ポイント)
- MS UI Gothic(斜線で下線の24ポイント)
- HeiseiMin-W3(汎用明朝の20ポイント)
- HeiseiKakuGo-W5(汎用ゴシックの赤色の20ポイント)
ここでは、この5つのフォントを定義しています。
//[1] MSゴシック Font fnt1 = new Font(BaseFont.CreateFont (@"c:\windows\fonts\msgothic.ttc,0", BaseFont.IDENTITY_H,true),40); //[2] MS Pゴシック-太字 Font fnt2 = new Font(BaseFont.CreateFont (@"c:\windows\fonts\msgothic.ttc,1", BaseFont.IDENTITY_H,true), 32,iTextSharp.text.Font.BOLD); //[3] MS UI Gothic-斜体-下線 Font fnt3 = new Font(BaseFont.CreateFont (@"c:\windows\fonts\msgothic.ttc,2", BaseFont.IDENTITY_H,true), 20,iTextSharp.text.Font.ITALIC | iTextSharp.text.Font.UNDERLINE); //[4] CJK明朝 Font fnt4 = new Font(BaseFont.CreateFont ("HeiseiMin-W3", "UniJIS-UCS2-HW-H",false),20); //[5] CJKゴシック-赤色 Font fnt5 = new Font(BaseFont.CreateFont ("HeiseiKakuGo-W5", "UniJIS-UCS2-HW-H",false),20); fnt5.SetColor(255,0,0);
フォントの適用の仕方
フォントを文書に適用するには、コンテンツを表すParagraphクラスのコンストラクタで、Fontオブジェクトを指定します。
//Document.Add(new Paragraph("フォントを適用させたい文字列", Fontオブジェクト)); //文言とフォントを指定してドキュメントに追加 doc.Add(new Paragraph("MSゴシックです",fnt1)); doc.Add(new Paragraph("MS Pゴシックの太字です",fnt2)); doc.Add(new Paragraph("MS UI Gothicの斜体/下線です",fnt3)); doc.Add(new Paragraph("HeiseiMin-W3(明朝)です",fnt4)); doc.Add(new Paragraph("HeiseiKakuGo-W5(ゴシック)の赤色です",fnt5));
作成するPDFファイル
このプログラムで生成されるPDFは、次のようになります。
フォントが適用されていることが分かります。
PDF文書のフォント情報の確認
さらにフォントの情報を確認してみましょう。文書のプロパティの[フォント]タブから確認することができます。
このプロパティから、表示に利用されているフォント、埋め込まれているフォント、エンコードといった情報を確認することができます。
フォントの設定の詳細
フォントを指定するにはiTextSharp.text名前空間のFontクラスを使用します。Fontクラスでは、コンストラクタにて「フォントの種類/サイズ/スタイル」を指定できます。
//Font(フォントの種類,サイズ) Font(Font.TIMES_ROMAN,10); //Font(フォントの種類,サイズ,スタイル) Font(Font.TIMES_ROMAN,12,Font.BOLD)
フォントのサイズは、数字(ポイント)で指定します。
フォントのスタイルには「NORMAL(標準)」「BOLD(太字)」「ITALIC(斜体)」「BOLDITALIC(太字・斜体)」「UNDERLINE(下線)」などが利用できます。複数のスタイルを適用する場合には、「|」によって連続して指定します。
なお、Fontクラスは、System.Drawing名前空間にも存在するため、混在する場合は「using iFont = iTextSharp.text.Font;」のようにクラスに別名(この場合はiFont)をつけると利用しやすいでしょう。
日本語フォントの使用
「MSゴシック」などのハードディスクにインストールされた機種依存フォントを使用する場合には「BaseFontクラスのCreateFontメソッド」を呼び出す必要があります。CreateFontメソッドでは「フォントファイルへのパス/エンコーディング設定/フォントをPDF文書に埋め込むか」を設定します。
Font fnt1 = new Font(BaseFont.CreateFont (@"c:\windows\fonts\msgothic.ttc,0", BaseFont.IDENTITY_H,true),40);
この例では、フォントの種類として「c:\windows\fonts\msgothic.ttc」ファイルの0番目のフォント(=MSゴシック)、エンコーディングとして「IDENTITY_H」、フォントの埋め込みを選択しています。
フォントファイルの指定
CreateFontメソッドでは、「@"c:\windows\fonts\msgothic.ttc,0"」というようにフォントファイルへのパスを指定しています。この拡張子がTTC(True Type Collection)のファイルはフォントの集合を表しています。そのためゼロ番目のフォントの利用するという意味で「0」という番号も付加しています。
エンコーディングの指定
エンコーディング(encoding)とは、文字をバイト列で表す方法のことです。PDFで機種依存フォントを利用する場合は、「BaseFont.IDENTITY_H(横書き)」か「BaseFont.IDENTITY_V(縦書き)」を指定する必要があります。
| エンコーディング | 説明 |
| IDENTITY_H | 横書き |
| IDENTITY_V | 縦書き |
例外の設定
なお、フォントファイルが存在しない場合などには例外が発生します(ただし、後述するビルトインフォントとCJK汎用フォントの場合、フォントファイルが存在しなくても問題ありません)。iTextSharpでは、DocumentExceptionやIOExceptionといった例外が発生するため、次のようなtry~catch文を記述しておくと良いでしょう。
Document doc = new Document(); try { PdfWriter.GetInstance(doc, new FileStream("XXX.pdf", FileMode.Create)); Font fnt = new Font(BaseFont.CreateFont (@"c:\windows\fonts\msgothic.ttc,0", BaseFont.IDENTITY_H,true),40); doc.Open(); doc.Add(new Paragraph("例外処理",fnt)); } catch(DocumentException ex) { MessageBox.Show(ex.Message,"DocumentException"); } catch(IOException ex) { MessageBox.Show(ex.Message,"IOException"); } finally { doc.Close(); }
ビルトインフォントとCJK汎用フォント
PDFには、閲覧するPCにフォントが存在しなくてもドキュメントを表示/印刷できるように、フォント情報を埋め込む機能が備わっています。これは便利な機能である反面、ファイルのサイズが肥大化してしまう可能性があります。
ビルトインフォント(欧文基本14フォント)
そこで、PDFの仕様として、次の欧文のフォントについては、フォントを埋め込まなくてもそのまま使用できるように規定されています。このフォントを「ビルトインフォント」と呼びます。
| No | フォント | 説明 |
| 1 | COURIER | 古いタイプライターのようなフォント(等幅) |
| 2 | COURIER(BOLD) | 太字のCOURIER |
| 3 | COURIER(OBLIQUE) | 斜体のCOURIER |
| 4 | COURIER(BOLD/OBLIQUE) | 太字・斜体のCOURIER |
| 5 | HELVETICA | グラフィックデザインでよく利用されるフォント |
| 6 | HELVETICA(BOLD) | 太字のHELVETICA |
| 7 | HELVETICA(OBLIQUE) | 斜体のHELVETICA |
| 8 | HELVETICA(BOLD/OBLIQUE) | 太字・斜体のHELVETICA |
| 9 | TIMES_ROMAN | 英字新聞の見出しのようなフォント |
| 10 | TIMES_ROMAN(BOLD) | 太字のTIMES_ROMAN |
| 11 | TIMES_ROMAN(ITALIC) | 斜体のTIMES_ROMAN |
| 12 | TIMES_ROMAN(BOLD/ITALIC) | 太字・斜体のTIMES_ROMAN |
| 13 | SYMBOL | 数式記号用のフォント |
| 14 | ZAPFDINGBATS | 数式以外の記号用フォント |
これらのフォントを利用するように指定した場合は、Adobe Readerが類似したフォントを自動的に選択して表示してくれます。
CJK言語パックの日本語フォント
日本語の場合も、ビルトインフォントと同様に「CJK(Chinese/Japanese/Korean)言語フォントパック」に含まれる「HeiseiMin-W3」「HeiseiKakuGo-W5」「KozMinPro-Regular」といった汎用の日本語フォントを利用することができます。
| フォント名 | 説明 |
| HeiseiMin-W3 | 明朝体 |
| HeiseiKakuGo-W5 | ゴシック |
| KozMinPro-Regular | 明朝体 |
これらのフォントを利用すれば、MSゴシックなどのフォント情報をPDFファイルに埋め込む必要がなくなり、サイズの肥大化を防ぐことができます
また、CJKフォントの場合には、次のエンコーディングを指定します。
| エンコーディング | 説明 |
| UniJIS-UCS2-H | 横書き |
| UniJIS-UCS2-V | 縦書き |
| UniJIS-UCS2-HW-H | 横書き(プロポーショナル欧文文字が半角) |
| UniJIS-UCS2-HW-V | 縦書き(プロポーショナル欧文文字が半角) |
「iTextAsian-1.0.dll」のロード
注意点として、これらのCJKフォントは「iTextAsian-1.0.dll」という別のDLLに含まれていますので、DocumentオブジェクトをOpenする前に、次のコードを呼び出してロードするようにしてください。サンプルプログラムでは、Form_Loadイベントで呼び出しています。
BaseFont.AddToResourceSearch("iTextAsian-1.0.dll");
Visual Studioで開発している場合は、「iTextAsian-1.0.dll」に参照設定をしておけば良いでしょう(ビルドすると自動的に実行ファイルと同じフォルダにコピーされます)。
Font 'HeiseiMin-W3' with 'UniJIS-UCS2-HW-H' is not recognized.」というようなエラーが出力されます。フォントの詳細については、さまざまなフォントについての概要や、WikiPediaなどのページをご覧頂くとよいかと思います。




