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


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

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;
        int exitcode = 0;

        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);

            /* ページを始める */
            p.begin_page_ext(0, 0, "width=300 height=300");

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

            /*
             * The following will only work on Mac or Windows, provided the font
             * Verdana is installed in the system.
             * 
             * 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"などの拡張子は除外)
             * が同じ場合は、単純にフォントをロードすることができる。
             */

            /*
             * または、下記のように絶対パスを指定することもできる。
             *
             * p.set_option("FontOutline=NotoSerif-Regular=/usr/fonts/NotoS-R.ttf");
             * 
             * この場合、検索パスは適用されず、フォントは上記で定義された場所から
             * ロードされる。
             */

            /*
             * フォント名 "NotoSerif-Regular" を使用してロードできる。
             */
            font = p.load_font("NotoSerif-Regular", "unicode", "");
            if (font == -1)
                throw new Exception("Error: " + p.get_errmsg());

            p.setfont(font, 10);
            p.fit_textline("Font file name: NotoSerif-Regular.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.println("PDFlib exception occurred:");
            System.err.println("[" + e.get_errnum() + "] " + e.get_apiname() +
                ": " + e.get_errmsg());
            exitcode = 1;
        }
        catch (Exception e) {
            System.err.println(e);
            exitcode = 1;
        }
        finally {
            if (p != null) {
                p.delete();
            }
            System.exit(exitcode);
        }
    }
}

関連ページ

(Apr 3, 2007 - May 23, 2019)