PDFlib

高度なPDFアプリケーションの開発を支援する定番プログラムライブラリー Supported by インフォテック株式会社

PDFlib サンプル集(クックブック)

本サンプルプログラムは、PDF 文書生成ライブラリーの実装である PDFlib の基本的な機能を実際のプログラムで紹介したものです。

本サイトでダウンロードした PDFlib は、一部機能の制限を除き、評価版として無償でお使いいただけます。

フォントの設定

PDFlib でフォントを設定するためのサンプルプログラムです。

  • Windows や Mac にあらかじめインストールされているフォントを使用する場合は、フォント名を使用してフォントを設定することができます。
  • 必要に応じて SearchPath で、フォントが格納されているフォルダを指定します。
  • フォント名とフォントファイル名が一致する場合は、フォント名よりフォントを設定することができます。
  • フォント名とフォントファイル名が同じでない場合は、FontOutline を使用しフォントファイル名とフォント名を紐付けます。
  • PostScript Type 1 フォントを使用する場合は、FontOutline 及び FontAFM または FontPFM により フォント名を設定します。また info_font 関数によりフォント名とフォントファイル情報を取得することができます。

必要な製品:PDFlib/PDFlib+PDI/PDFlib PPS


/* $Id: font_resources.java,v 1.18 2013/01/15 10:11:58 stm Exp $
 * フォントの設定:
 * フォントを設定して検索します。
 *
 * 一番簡単なケースでは、Windows や Mac にあらかじめインストールされたフォントを
 * 使用します。さらに、SearchPath を使って、フォントが格納されているフォントフォ
 * ルダを指定します。次のケースは、フォント名に一致するフォントファイル名により
 * フォントを使用します。フォント名とフォントファイル名が同じでない場合は、Font
 * Outline を使って PDFlib によって使用されるフォント名を定義します。Type 1 フォ
 * ントでは、FontOutline および FontAFM または FontPFM により PDFlib で使用する
 * フォント名を定義します。また、info_font 関数によってフォント名とフォントファ
 * イルを得られます。
 *
 * 必要な製品 : PDFlib/PDFlib+PDI/PPS 9
 * 必要なデータ: 無し
 */
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;

public class font_resources {
    public static void main(String argv[]) {
        /* 必要に応じてデータファイルがあるフォルダのパスを指定する */
        String searchpath = "../input";
        String outfile = "font_resources.pdf";
        String title = "Font Resources";

        pdflib p = null;
        int font;
        String fontname;
        int x = 20, y = 260;

        try {
            p = new pdflib();

            /* load_font() 等でエラーが起きた場合、-1を返す */
            p.set_option("errorpolicy=return");

            if (p.begin_document(outfile, "") == -1)
                throw new Exception("Error: " + p.get_errmsg());

            p.set_info("Creator", "PDFlib Cookbook");
            p.set_info("Title", title + " $Revision: 1.18 $");

            /* 出力PDFページを作成する */
            p.begin_page_ext(0, 0, "width=300 height=300");

            /* 便利な方法:OS上にすでにフォントがインストールされていて、正確なフォ
             * ント名が分かっている場合は、フォント名でロードすることができる。
             * (ホストフォントの正確な名前を調べる方法についてはチュートリアル参照)
             * 例えば"Verdana"フォントがOS上(MacまたはWindows)にインストールされて
             * いる場合、以下のようにロードすることができる。
             */

            /*
             * 
             * font = p.load_font("Verdana", "unicode", "");
             * if (font == -1)
             *     throw new Exception("Error: " + p.get_errmsg());
             * 
             * p.setfont(font, 10);
             * p.fit_textline("Font file is installed in the system", x, y, "");
             * fontname = p.get_parameter("string", p.info_font(font,
             *                                "fontname", "api"));
             * p.fit_textline("Font name used in PDFlib: "
             *                                + fontname, x, y-=20, "");
             */

            /* ホストフォント(OS上にインストールされているフォント)を使わない場合は、
             * 「Searchpath」 でフォントのあるフォルダを指定する。 
             * 必要があれば、さらに「SearchPath」に、フォントのあるフォルダを追加する。
             * PDFLibは「SearchPath」で指定された全てのフォルダからフォントを検索する。
             */
            p.set_option("searchpath={" + searchpath + "}");

            /* フォント名とフォントファイル名(".ttf", ".otf", ".pfb"などの拡張子は除外)
             * が同じ場合は、単純にフォントをロードすることができる。
             * 下記の例はフォント名"LuciduxSans-Oblique"を指定し、アウトラインファイル
             * "LuciduxSans-Oblique.pfa"よりロードしている。 
             */
            font = p.load_font("LuciduxSans-Oblique", "unicode", "embedding");
            if (font == -1)
                throw new Exception("Error: " + p.get_errmsg());

            p.setfont(font, 10);
            p.fit_textline("Font file name: LuciduxSans-Oblique.pfa", x,
                y -= 40, "");
            fontname = p.get_string((int) p.info_font(font, "fontname", "api"),
                "");
            p.fit_textline("Font name used in PDFlib: " + fontname, x, y -= 20,
                "");

            /* フォント名とファイル名が異なる場合「FontOutline」を使用し、フォントファ
             * イル名 "GenI102.TTF"(http://scripts.sil.org/gentiumを参照)と、フォント
             * 名"GentiumItalic"(任意の名前)を紐付ける。
             */
            p.set_option("FontOutline={GentiumItalic=GenI102.TTF}");

            /* 下記の通り、絶対パスを指定することも可能
             * 
             * p.set_option("FontOutline=GentiumItalic=/usr/fonts/GenI102.TTF");
             * 
             * この場合、"searchpath"で指定したディレクトリのパスではなく、上記で指定
             * した絶対パスよりフォントがロードされる。
             */

            /*
             * フォント"GentiumItalic"をロードする
             */
            font = p.load_font("GentiumItalic", "unicode", "");
            if (font == -1)
                throw new Exception("Error: " + p.get_errmsg());

            p.setfont(font, 10);
            p.fit_textline("Font file name: GenI102.TTF", x, y -= 40, "");
            fontname = p.get_string((int) p.info_font(font, "fontname", "api"),
                "");
            p.fit_textline("Font name used in PDFlib: " + fontname, x, y -= 20,
                "");

            /* PostScript Type1 フォントの場合 、フォントのアウトラインファイル、メトリッ
             * クファイルの両方が必要となる。「FontOutline」で、フォントのアウトラインフ
             * ァイル(lcdxsr.pfa)とフォント名を紐付ける。さらに「FontAFM」(または「Font
             * PFM」)で、フォントのメトリックファイル(lcdxsr.afm)とフォント名を紐付ける。
             */
            p.set_option("FontOutline={LuciduxSans=lcdxsr.pfa}");
            p.set_option("FontAFM={LuciduxSans=lcdxsr.afm}");

            /* "LuciduxSans" フォントをロードし、埋め込む */
            font = p.load_font("LuciduxSans", "unicode", "embedding");
            if (font == -1)
                throw new Exception("Error: " + p.get_errmsg());

            p.setfont(font, 10);
            p.fit_textline("Font file names: lcdxsr.pfa and lcdxsr.afm", x,
                y -= 40, "");
            fontname = p.get_string((int) p.info_font(font, "fontname", "api"),
                "");
            p.fit_textline("Font name used in PDFlib: " + fontname, x, y -= 20,
                "");

            /* ページを終了する */
            p.end_page_ext("");

            p.end_document("");
        }
        catch (PDFlibException e) {
            System.err.print("PDFlib exception occurred:\n");
            System.err.print("[" + e.get_errnum() + "] " + e.get_apiname()
                + ": " + e.get_errmsg() + "\n");
        }
        catch (Exception e) {
            System.err.println(e.getMessage());
        }
        finally {
            if (p != null) {
                p.delete();
            }
        }
    }
}
(Apr 3, 2007 - Nov 27, 2014)