PDFlib

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

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

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

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

単一行テキスト

単一行テキストを出力するプログラムです。

このサンプルプログラムでは、fit_textline() 関数でさまざまなオプションを使用し、以下の単一行テキストを出力します。

  • 異なるフォントサイズのテキスト
  • 取り消し線、アンダーライン、オーバーラインを持つテキスト
  • フォントの横幅の拡大縮小、文字の間隔、単語の間隔、などを指定したテキスト
  • 指定した色で塗りつぶしたフォント、縁取りしたフォント、袋文字
  • はめ込み枠を定義し、枠内の色々な位置にテキストを配置
  • はめ込み枠の大きさに合わせてテキストを縮小したり、枠からはみ出た部分を切り落として配置

fit_textline() 関数を使った、単一行テキストの出力方法については、 PDFlib入門5 テキストを出力する(Ⅲ) でも解説しています。

必要な製品:PDFlib または PDFlib+PDI または PDFlib PPS


/*
 * 単一テキスト :
 * さまざまなオプションを使用した単一行テキストを出力するサンプルです。
 * 
 * 異なるフォントサイズのテキスト行を配置します。
 * オーバーライン、取り消し線、アンダーラインテキストを出力します。
 * 文字の間隔、単語の間隔、フォントの横幅の拡大縮小などを定義してテキストを出力します。
 * 塗りつぶし色を定義したテキストを出力します。
 * 定義した色で輪郭を縁取ったテキストを出力します。
 * さまざまな位置のはめ込み枠にテキストを配置します。
 * 必要であれば、自動的に縮小してはめ込み枠内をテキストで満たします。
 *
 * 必要な製品 : PDFlib/PDFlib+PDI/PPS 9
 * 必要なデータ : 無し
 */
package com.pdflib.cookbook.pdflib.text_output;

import com.pdflib.pdflib;
import com.pdflib.PDFlibException;

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

        pdflib p = null;
        int exitcode = 0;
        int font, x = 10, xt = 280, y = 800, yoff = 50;
        String optlist;
        String textline = "Giant Wing Paper Plane";

        try {
            p = new pdflib();

            p.set_option("searchpath={" + searchpath + "}");

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

            /* 出力PDF文書を開く。第1パラメータには出力ファイル名を指定 */
            if (p.begin_document(outfile, "") == -1)
                throw new Exception("Error: " + p.get_errmsg());

            p.set_info("Creator", "PDFlib Cookbook");
            p.set_info("Title", title);

            /* 出力PDFページをA4サイズで作成する */
            p.begin_page_ext(0, 0, "width=a4.width height=a4.height");

            font = p.load_font("Helvetica", "unicode", "");

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

            /* フォントと、フォントサイズを指定する */
            p.setfont(font, 14);

            /* -----------------------
             * 1行目 : オプション無し
             * -----------------------
             * オプション無しで出力
             */

            /* サンプルテキスト */
            p.fit_textline(textline, x, y, "");

            /* 説明用テキスト */
            p.fit_textline("fit_textline() without any options", xt, y,
                "fontsize=12");


            /*----------------------------
             * 2行目 : フォントサイズ設定
             * ---------------------------
             * "fontsize" フォントサイズを設定 
             */
            optlist = "fontsize=22";

            p.fit_textline(textline, x, y-=yoff, optlist); /* サンプルテキスト */
            p.fit_textline(optlist, xt, y, "fontsize=12"); /* 説明用テキスト */


            /*--------------------
             * 3行目 : 取り消し線
             * -------------------
             * "strikeout" 取り消し線
             */
            optlist = "strikeout";
            
            p.fit_textline(textline, x, y-=yoff, optlist); /* サンプルテキスト */
            p.fit_textline(optlist, xt, y, "fontsize=12"); /* 説明用テキスト */


            /*------------------------
             * 4行目 : アンダーライン
             * -----------------------
             * "underline" アンダーラインを引く
             * "underlinewidth" アンダーラインの線幅を指定
             * "underlineposition" アンダーラインの位置を、フォントのベースライン
             * からの距離で指定
             */
            optlist = "underline underlinewidth=7% underlineposition=-20%";

            p.fit_textline(textline, x, y-=yoff, optlist); /* sample text */
            p.fit_textline(optlist, xt, y, "fontsize=12"); /* description */


            /*------------------------
             * 5行目 : オーバーライン
             * -----------------------
             * "overline" オーバーラインを引く 
             */
            optlist = "overline";

            p.fit_textline(textline, x, y-=yoff, optlist); /* サンプルテキスト */
            p.fit_textline(optlist, xt, y, "fontsize=12"); /* 説明用テキスト */


            /*------------------------------
             * 6行目 : フォントの横幅の拡大
             * -----------------------------
             * "horizscaling" フォントの横幅の倍率を設定 
             */
            optlist = "horizscaling=150%";

            p.fit_textline(textline, x, y-=yoff, optlist); /* サンプルテキスト */
            p.fit_textline(optlist, xt, y, "fontsize=12"); /* 説明用テキスト */


            /*------------------------
             * 7行目 : 文字間隔の設定
             * -----------------------
             * "charspacing=30%" 文字の間にフォントサイズの30%のスペースを挿入 
             */
            optlist = "charspacing=30%";

            p.fit_textline(textline, x, y-=yoff, optlist); /* サンプルテキスト */
            p.fit_textline(optlist, xt, y, "fontsize=12"); /* 説明用テキスト */


            /*------------------------
             * 8行目 : 単語間隔を設定
             * -----------------------
             * "wordspacing=50%" 単語の間にフォントサイズの50%のスペースを挿入
             */
            optlist = "wordspacing=50%";
            
            p.fit_textline(textline, x, y-=yoff, optlist); /* サンプルテキスト */
            p.fit_textline(optlist, xt, y, "fontsize=12"); /* 説明用テキスト */


            /*--------------------------------------
             * 9行目 : フォントの塗りつぶし色を設定
             * -------------------------------------
             * "fillcolor" フォントの塗りつぶし色を設定
             */
            optlist = "fillcolor={rgb 0.5 0.2 0.5}";

            p.fit_textline(textline, x, y-=yoff, optlist);
            p.fit_textline(optlist, xt, y, "fontsize=12");


            /*---------------------------------------
             * 10行目 : フォントを塗りつぶし、縁取る
             * --------------------------------------
             * "fontsize" フォントサイズを設定
             * "fillcolor" フォントの塗りつぶし色を設定
             * "strokecolor" 縁取り線の色を設定
             * "strokewidth" 縁取り線の幅を設定
             * "textrendering=2" フォントを塗りつぶし、縁取る。
             */
            optlist = 
                "fontsize=22 fillcolor={rgb 0.6 0.3 0.6} strokecolor={gray 0} " +
                "strokewidth=0.4 textrendering=2";

            /* サンプルテキスト */
            p.fit_textline(textline, x, y-=yoff, optlist);

            /* 説明用テキスト */
            p.fit_textline("fillcolor={rgb 0.6 0.3 0.6} strokecolor={gray 0} ",
                xt, y+10, "fontsize=12");
            p.fit_textline("strokewidth=0.4 textrendering=2 fontsize=22",
                xt, y-5, "fontsize=12");


            /*-----------------
             * 11行目 : 袋文字
             * ----------------
             * "fontsize" フォントサイズを設定
             * "strokecolor" 縁取り線の色を設定
             * "strokewidth" 縁取り線の幅を設定
             * "textrendering=1" 袋文字
             */
            optlist =
                "fontsize=22 strokecolor={gray 0} strokewidth=0.4 textrendering=1";

            /* サンプルテキスト */
            p.fit_textline(textline, x, y-=yoff, optlist);

            /* 説明用テキスト */
            p.fit_textline("strokecolor={gray 0} strokewidth=0.4", xt, y+10,
                "fontsize=12");
            p.fit_textline("textrendering=1 fontsize=22", xt, y-=5,
                "fontsize=12");


            /*------------------------------------------
             * 12行目 : はめ込み枠内に配置(デフォルト)
             * -----------------------------------------
             * "boxsize={200 20}" はめ込み枠の大きさ。幅200×高さ20
             * "showborder" はめ込み枠の境界線
             *
             * テキストは、はめ込み枠内の左下に配置される(デフォルト値) 
             */
            optlist = "boxsize={200 20} showborder";

            p.fit_textline(textline, x, y-=yoff, optlist);   /* サンプルテキスト */
            p.fit_textline(optlist, xt, y+3, "fontsize=12"); /* 説明用テキスト */


            /*---------------------------------
             * 13行目 : はめ込み枠内の右上に配置
             * -------------------------------- 
             * "boxsize={200 20}" はめ込み枠の大きさ。幅200×高さ20
             * "position={top right}" はめ込み枠内の、右上にテキストを配置
             * "showborder" はめ込み枠の境界線
             */
            optlist = "boxsize={200 20} position={top right} showborder";
            
            p.fit_textline(textline, x, y-=yoff, optlist);   /* サンプルテキスト */
            p.fit_textline(optlist, xt, y+3, "fontsize=12"); /* 説明用テキスト */


            /*------------------------------------------------
             * 14行目 : はめ込み枠からはみ出た部分を切り落とす
             * -----------------------------------------------
             * "boxsize={130 20}" はめ込み枠の大きさ。幅130×高さ20
             * "fitmethod=clip" はめ込み枠に対し、テキストが大きい場合は、枠より
             *  はみ出た部分が切り落とされる
             * "showborder" はめ込み枠の境界線
             */
            optlist = "boxsize={130 20} fitmethod=clip showborder";

            p.fit_textline(textline, x, y-=yoff, optlist); /* sample text */
            p.fit_textline(optlist, xt, y+3, "fontsize=12"); /* description */
            
            
            /*-------------------------------------------------------------
             * 15行目 : はめ込み枠の大きさに合わせ、テキストを枠内に収める
             * ------------------------------------------------------------
             * "boxsize={130 20}" はめ込み枠の大きさ。幅130×高さ20
             *
             * "fitmethod=auto" テキストをはめ込み枠内に自動的に収める。
             * テキストが枠内に収まる場合は、そのままの大きさで配置する。
             * テキストが枠より大きく、収まりきらない場合は、フォントの横幅を元の
             * 75%を下限とし、縮小させて配置する。
             * 75%に縮小しても枠内に収まりきらない場合は、"fitmethod=meet"が適用さ
             * れ、縦横比を保ったまま、枠内に収まるようフォントを縮小する。
             * 
             * "shrinklimit=0.75" デフォルト値のため省略。"fitmethod=auto"でテキス
             *  トを枠内に収めるために使用する、長体比率の下限
             *
             * このケースは、テキストが枠より 大きく、枠内に収まりきらないため、文
             * 字の横幅を75%を下限とし縮小させ枠内に収める
             */
            optlist = "boxsize={130 20} fitmethod=auto showborder";

            p.fit_textline(textline, x, y-=yoff, optlist); /* sサンプルテキスト */
            p.fit_textline(optlist, xt, y+3, "fontsize=12"); /* 説明用テキスト */


            /*-------------------------------------------------------
             * 16行目 : 小さなはめ込み枠に、縦横比を保ったまま配置
             * ------------------------------------------------------
             * はめ込み枠のサイズをさらに小さくし(80×20)、"fitmethod=auto"で、テキ
             * ストを自動的に縮小し枠内に収める。
             *
             * このケースは、文字の横幅を元の75%に縮小しても枠内に収まりきらないため、
             * "fitmethod=meet"が適用され、縦横比を保ったまま枠内に収まるようフォン
             *  トを、縮小し配置する
             */
            optlist = "boxsize={100 20} fitmethod=auto showborder";
            
            p.fit_textline(textline, x, y-=yoff, optlist);   /* サンプルテキスト */
            p.fit_textline(optlist, xt, y+3, "fontsize=12"); /* 説明用テキスト */

            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 - Jun 17, 2014)