iTextで標準で使えるフォントは英語の基本14種(Times、Helvetica、Courierの各書体に対してノーマル、ボールド、イタリック、ボールドイタリック+記号2種)と日本語3種(平成明朝、平成角ゴシック、小塚明朝)です。これらすべてを表示するコードは次のような感じになります。

PDF出力
平成明朝と小塚明朝は同じに見えますね。と思って、AdobeReaderのプロパティでフォントの欄を見ると、「実際のフォント」はどちらも小塚明朝でした。うーむ。
フォントファイル名を直接指定すると、標準以外のフォントも使えます。たとえば、こんな感じです。/Windows/Fonts はWindowsのFontsフォルダを指しています。

フォントのプロパティ
ttcの拡張子があるものは複数のフォントセットを含むコレクションになっているので、ファイル名に続けて、カンマで区切ってインデックス(番号)を指定します。それぞれのインデックスで表示されるフォントは、フォント表示ウィンドウの[<前へ][次へ>]ボタンで確認できます。

フォント表示ウィンドウ
出力は次のようになります。

標準以外のフォント
ネット等からダウンロードしたフォントもこの方法で表示することができましたが、Macintoshからコピーしたヒラギノ等はうまく表示できませんでした。エンコーディングをWINANSIにするとアルファベットだけ表示されるので、よく調べると何か方法があるのかも知れません。ちなみに、Macintosh のフォントファイルを Windows にインストール(単にコピーしてダブルクリック)すると、そのままWordとかで使えてしまうんですね。知りませんでした。

Windowsでヒラギノ
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
public class FontTest{
public static void main(String[] args) throws DocumentException, IOException {
String filename = "FontTest.pdf";
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(filename));
document.open();
BaseFont bf = BaseFont.createFont(BaseFont.TIMES_ROMAN,BaseFont.WINANSI,BaseFont.EMBEDDED);
Font font = new Font(bf, 12);
document.add(new Paragraph("Times Roman",font));
bf = BaseFont.createFont(BaseFont.TIMES_BOLD,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Times Bold",font));
bf = BaseFont.createFont(BaseFont.TIMES_ITALIC,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Times Italic",font));
bf = BaseFont.createFont(BaseFont.TIMES_BOLDITALIC,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Times Bold Italic",font));
bf = BaseFont.createFont(BaseFont.HELVETICA,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Helvetica",font));
bf = BaseFont.createFont(BaseFont.HELVETICA_BOLD,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Helvetica Bold",font));
bf = BaseFont.createFont(BaseFont.HELVETICA_OBLIQUE,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Helvetica Oblique",font));
bf = BaseFont.createFont(BaseFont.HELVETICA_BOLDOBLIQUE,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Helvetica Bold Oblique",font));
bf = BaseFont.createFont(BaseFont.COURIER,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Courier",font));
bf = BaseFont.createFont(BaseFont.COURIER_BOLD,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Courier Bold",font));
bf = BaseFont.createFont(BaseFont.COURIER_OBLIQUE,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Courier Oblique",font));
bf = BaseFont.createFont(BaseFont.COURIER_BOLDOBLIQUE,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Courier Bold Oblique",font));
bf = BaseFont.createFont(BaseFont.SYMBOL,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Symbol",font));
bf = BaseFont.createFont(BaseFont.ZAPFDINGBATS,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Zapf Dingbats",font));
bf = BaseFont.createFont("HeiseiMin-W3","UniJIS-UCS2-H",BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("平成明朝-W3",font));
bf = BaseFont.createFont("HeiseiKakuGo-W5","UniJIS-UCS2-H",BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("平成角ゴ-W5",font));
bf = BaseFont.createFont("KozMinPro-Regular","UniJIS-UCS2-H",BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("小塚明朝-Pro",font));
document.close();
}
}
PDFに出力した結果は次のようになります。import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
public class FontTest{
public static void main(String[] args) throws DocumentException, IOException {
String filename = "FontTest.pdf";
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(filename));
document.open();
BaseFont bf = BaseFont.createFont(BaseFont.TIMES_ROMAN,BaseFont.WINANSI,BaseFont.EMBEDDED);
Font font = new Font(bf, 12);
document.add(new Paragraph("Times Roman",font));
bf = BaseFont.createFont(BaseFont.TIMES_BOLD,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Times Bold",font));
bf = BaseFont.createFont(BaseFont.TIMES_ITALIC,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Times Italic",font));
bf = BaseFont.createFont(BaseFont.TIMES_BOLDITALIC,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Times Bold Italic",font));
bf = BaseFont.createFont(BaseFont.HELVETICA,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Helvetica",font));
bf = BaseFont.createFont(BaseFont.HELVETICA_BOLD,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Helvetica Bold",font));
bf = BaseFont.createFont(BaseFont.HELVETICA_OBLIQUE,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Helvetica Oblique",font));
bf = BaseFont.createFont(BaseFont.HELVETICA_BOLDOBLIQUE,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Helvetica Bold Oblique",font));
bf = BaseFont.createFont(BaseFont.COURIER,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Courier",font));
bf = BaseFont.createFont(BaseFont.COURIER_BOLD,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Courier Bold",font));
bf = BaseFont.createFont(BaseFont.COURIER_OBLIQUE,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Courier Oblique",font));
bf = BaseFont.createFont(BaseFont.COURIER_BOLDOBLIQUE,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Courier Bold Oblique",font));
bf = BaseFont.createFont(BaseFont.SYMBOL,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Symbol",font));
bf = BaseFont.createFont(BaseFont.ZAPFDINGBATS,BaseFont.WINANSI,BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("Zapf Dingbats",font));
bf = BaseFont.createFont("HeiseiMin-W3","UniJIS-UCS2-H",BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("平成明朝-W3",font));
bf = BaseFont.createFont("HeiseiKakuGo-W5","UniJIS-UCS2-H",BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("平成角ゴ-W5",font));
bf = BaseFont.createFont("KozMinPro-Regular","UniJIS-UCS2-H",BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("小塚明朝-Pro",font));
document.close();
}
}

PDF出力
平成明朝と小塚明朝は同じに見えますね。と思って、AdobeReaderのプロパティでフォントの欄を見ると、「実際のフォント」はどちらも小塚明朝でした。うーむ。
フォントファイル名を直接指定すると、標準以外のフォントも使えます。たとえば、こんな感じです。/Windows/Fonts はWindowsのFontsフォルダを指しています。
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
public class FontTest{
public static void main(String[] args) throws DocumentException, IOException {
String filename = "FontTest.pdf";
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(filename));
document.open();
BaseFont bf = BaseFont.createFont("/Windows/Fonts/ariblk.ttf",BaseFont.WINANSI, BaseFont.EMBEDDED);
Font font = new Font(bf, 12);
document.add(new Paragraph("Arial Black",font));
bf = BaseFont.createFont("/Windows/Fonts/meiryob.ttc,0",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("メイリオ太字 Windows",font));
bf = BaseFont.createFont("/Windows/Fonts/meiryob.ttc,1",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("メイリオ太字 Windows",font));
bf = BaseFont.createFont("/Windows/Fonts/meiryob.ttc,2",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("メイリオ太字 Windows",font));
bf = BaseFont.createFont("/Windows/Fonts/meiryob.ttc,3",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("メイリオ太字 Windows",font));
document.close();
}
}
Windowsではフォントフォルダを開くとコントロールパネルになってしまいますが、フォント名をダブルクリックして「フォントファミリの詳細」画面を開き、右クリックでプロパティを呼び出すと、そのフォントが格納されているファイルの名前を調べることができます。import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
public class FontTest{
public static void main(String[] args) throws DocumentException, IOException {
String filename = "FontTest.pdf";
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(filename));
document.open();
BaseFont bf = BaseFont.createFont("/Windows/Fonts/ariblk.ttf",BaseFont.WINANSI, BaseFont.EMBEDDED);
Font font = new Font(bf, 12);
document.add(new Paragraph("Arial Black",font));
bf = BaseFont.createFont("/Windows/Fonts/meiryob.ttc,0",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("メイリオ太字 Windows",font));
bf = BaseFont.createFont("/Windows/Fonts/meiryob.ttc,1",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("メイリオ太字 Windows",font));
bf = BaseFont.createFont("/Windows/Fonts/meiryob.ttc,2",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("メイリオ太字 Windows",font));
bf = BaseFont.createFont("/Windows/Fonts/meiryob.ttc,3",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
font = new Font(bf, 12);
document.add(new Paragraph("メイリオ太字 Windows",font));
document.close();
}
}

フォントのプロパティ
ttcの拡張子があるものは複数のフォントセットを含むコレクションになっているので、ファイル名に続けて、カンマで区切ってインデックス(番号)を指定します。それぞれのインデックスで表示されるフォントは、フォント表示ウィンドウの[<前へ][次へ>]ボタンで確認できます。

フォント表示ウィンドウ
出力は次のようになります。

標準以外のフォント
ネット等からダウンロードしたフォントもこの方法で表示することができましたが、Macintoshからコピーしたヒラギノ等はうまく表示できませんでした。エンコーディングをWINANSIにするとアルファベットだけ表示されるので、よく調べると何か方法があるのかも知れません。ちなみに、Macintosh のフォントファイルを Windows にインストール(単にコピーしてダブルクリック)すると、そのままWordとかで使えてしまうんですね。知りませんでした。

Windowsでヒラギノ
投稿:竹形 誠司[takegata]/2011年 04月 20日 23時 46分
/更新:2011年 04月 21日 00時 34分