竹形誠司 ブログ
Java+MySQL+Tomcat    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
iText(PDFライブラリ)で使えるフォント
by 竹形 誠司[takegata]
iTextで標準で使えるフォントは英語の基本14種(Times、Helvetica、Courierの各書体に対してノーマル、ボールド、イタリック、ボールドイタリック+記号2種)と日本語3種(平成明朝、平成角ゴシック、小塚明朝)です。これらすべてを表示するコードは次のような感じになります。
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に出力した結果は次のようになります。
PDF出力
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ではフォントフォルダを開くとコントロールパネルになってしまいますが、フォント名をダブルクリックして「フォントファミリの詳細」画面を開き、右クリックでプロパティを呼び出すと、そのフォントが格納されているファイルの名前を調べることができます。
フォントのプロパティ
フォントのプロパティ

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

出力は次のようになります。
標準以外のフォント
標準以外のフォント

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

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