PDFlib

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

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

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

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

プッシュボタン

PDFlibでプッシュボタンフォームフィールドを生成するプログラムです。

"Print" と "Save" のプッシュボタンを作成し、アクションにより、それぞれ"印刷"と"名前を付けて保存" のコマンドを実行します。

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


/*
 * プッシュボタン:
 * "Print"と"Save As" のコマンドとを実行するために、Print" と 
 * "Save" のプッシュボタンフォームフィールドを生成します。
 * 
 * 2つのプッシュボタンフォームフィールドを生成する。 Acrobatの
 * コマンド "File/Print"または"File/Save As"を実行するための
 * 2つのアクションを作成します。
 * ユーザーがそれぞれのフィールドをクリックしたとき、"Print" 
 * または "Save As"のアクションを実行します。
 * ボタンはキャプションか、テンプレートとしてロードされた画像を
 * 使用して表示します。
 *
 * 必要な製品 : PDFlib/PDFlib+PDI/PPS 9
 * 必要なデータ : 無し
 */
package com.pdflib.cookbook.pdflib.form_fields;

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

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

        String optlist;
        String p_imagefile = "fileprint.jpg";
        String s_imagefile = "filesaveas.jpg"; 
        int font;
        double width=60, height=30, llx = 40, lly = 600;
        int pact, sact, pimg, simg;
        double pwidth, pheight, swidth, sheight;

        try {
            p = new pdflib();

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

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

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

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

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

            /* "print"のイメージテンプレートをロードする */
            pimg = p.load_image("auto", p_imagefile, "template=true");
            if (pimg == -1)
                throw new Exception("Error: " + p.get_errmsg());

            /* "Save As" のイメージテンプレートをロードする */
            simg = p.load_image("auto", s_imagefile, "template=true");
            if (simg == -1)
                throw new Exception("Error: " + p.get_errmsg());

            /* Acrobatのコマンド "File/Print"(ファイル/印刷)を実行するための
             * アクションを作成する
             */
            pact = p.create_action("Named", "menuname=Print");

            /* Acrobatのコマンド "File/Save As"(ファイル/名前を付けて保存)を
             * 実行するためのアクションを作成する 
             */
            sact = p.create_action("Named", "menuname=SaveAs");

            /* ページを始める */
            p.begin_page_ext(0, 0, " width=a4.width height=a4.height");
            
            p.setfont(font, 14);
            
            
            /* ------------------------------------------------------------
             *  Acrobatメニューコマンドを実行するための2つのプッシュボタン
             * フィールドを生成し、キャプションを使用してそれを表す
             * ------------------------------------------------------------
             */

            /* 説明用テキストを出力する */
            p.fit_textline("Two buttons executing Acrobat menu commands and " +
                "represented by a caption:", llx, lly, "");
            lly-=60;

            /* "Print" と "Save" のプッシュボタンフォームフィールドを生成する
             * ライトブルーの背景色を持つボタンを指定する
             * (backgroundcolor={rgb 0.95 0.95 1}) and 
             * 青の境界線を指定(bordercolor={rgb 0.25 0 0.95}) 線幅はデフォルト(1)
             * ボタンにテキスト「Print」を付け、文字を青で塗りつぶす
             * (caption={Print} fillcolor={rgb 0.25 0 0.95}).
             * 各ボタンにツールヒントを定義する
             * ユーザーがフィールドエリアからマウスボタンを離したときに実行される
             * アクション(アクションは上記で指定)を定義する
             * (action={up <	actionhandle>}).
             */
            optlist = "bordercolor={rgb 0.25 0 0.95} " +
                "backgroundcolor={rgb 0.95 0.95 1} " +
                "fillcolor={rgb 0.25 0 0.95} font=" + font + " fontsize=14";

            p.create_field(llx, lly, llx + width, lly + height, "print",
                "pushbutton", optlist + " caption={Print} action={up " + pact + 
                "} tooltip={Print the document}");

            llx+=100;

            p.create_field(llx, lly, llx + width, lly + height, "save",
                    "pushbutton", optlist + " caption={Save As} action={up " + sact + 
                "} tooltip={Save the document}");

             
            /* ------------------------------------------------------------
             * Acrobatメニューコマンドを実行するための2つのプッシュボタン
             * フィールドを生成し、画像を使用してそれを表す
             * ------------------------------------------------------------
             */
            llx=40;
            lly=400;
                
            /* 説明用テキストを出力する */
            p.fit_textline("Two buttons executing Acrobat menu commands and " +
                "represented by an image:", llx, lly, "");
            lly-=60;
            
            /* "Print"イメージの幅と高さを取得する */
            pwidth = p.info_image(pimg, "imagewidth", "");
            pheight = p.info_image(pimg, "imageheight", "");
               
            /* "Save"イメージの幅と高さを取得する */
            swidth = p.info_image(simg, "imagewidth", "");
            sheight = p.info_image(simg, "imageheight", "");
            
            /* "printicon" と "saveicon" のプッシュボタンフォームフィールドを
             * 生成する
             * ボタンの高さだけではなく、画像の比率に基づいてボタンの幅を計算する
             * ユーザーがフィールドエリアからマウスボタンを離したときに実行される
             * アクション(アクションは上記で指定)を定義する
             * (action={up <	actionhandle>}).
             * 画像でボタンを指定する(icon=<	imagehandle>).
             * 各ボタンにツールヒントを定義する
             * 画像を長方形のボタンにはめ込んでください: Acrobatの特定の動作のため、
             * 境界色の指定と、線幅をゼロにセットする必要がある
             */
            double pbuttonwidth = pwidth/pheight*height;
            
            p.create_field(llx, lly, llx + pbuttonwidth, lly + height, "printicon",
                "pushbutton", "action={up " + pact + "} icon=" + pimg +
                " tooltip={Print the document} bordercolor={gray 0} linewidth=0" +
                " font=" + font);
            
            llx+=100;
            
            double sbuttonwidth = swidth/sheight*height;
            
            p.create_field(llx, lly, llx + sbuttonwidth, lly + height, "saveicon",
                "pushbutton", "action={up " + sact + "} icon=" + simg +
                " tooltip={Save the document} bordercolor={gray 0} linewidth=0" +
                " font=" + font);
            
            p.close_image(pimg);
            p.close_image(simg);
            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);
        }
    }
}
(Jan 19, 2016 - May 23, 2019)