PDFlib

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

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

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

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

グラデーション

PDFlib で、図形やテキストを、2色のグラデーションカラーで塗り潰すサンプルプログラムです。

setcolor() 関数とshading() 関数で、グラデーションの色と、始点色、終点色の座標を指定し、shfill() 関数で塗りつぶします。

通常、PDFlibでは2色間のグラデーションをサポートしていますが、グラデーションパターンを組み合わせることにより、2色以上のグラデーションの表示も可能です。
Q & A 「 複数色でのグラデーション表示」で、処理手順やソースコードをご紹介しておりますのでご覧ください。


/* $Id: color_gradient.java,v 1.13 2013/02/20 10:35:47 stm Exp $
 * グラデーション:
 * PDFlib で、エリアやテキストをグラデーションカラーで塗り潰すサンプル
 * プログラムです。
 *
 * 必要な製品 : PDFlib/PDFlib+PDI/PPS 9
 * 必要なデータ : none
 */
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;

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

        pdflib p = null;
        int font, sh, pattern;
        int fontsize = 36;

        try {
            p = new pdflib();

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

            /* 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.13 $");

            /* 出力PDFページを作成する */
            p.begin_page_ext(595, 842, "");

            /*
             * 緑から黒のグラデーション表示:
             * まず初めに、開始色に緑を指定する
             */
            p.setcolor("fillstroke", "rgb", 0.0, 0.5, 0.5, 0.0);

            /*
             * 終了色として黒を指定する。
             * ページと同じサイズで線形のグラデーションを定義する。
             */
            sh = p.shading("axial", 0, 0, 595, 842, 0.0, 0.0, 0.0, 0.0, "");

            /* グラデーションで塗りつぶす */
            p.shfill(sh);

            /*
             * 矩形のグラデーション表示:
             * カレントグラフィックステータスを保存
             */
            p.save();

            /* 開始色としてオレンジを指定する */
            p.setcolor("fill", "rgb", 1.0, 0.5, 0.1, 0.0);

            /*
             * 終了色としてライトオレンジを指定する。
             * 矩形と同じサイズで線形のグラデーションを定義し、塗りつぶす。
             */
            sh = p.shading("axial", 200, 200, 450, 450, 0.9, 0.8, 0.8, 0.0, "");

            /*
             * 矩形を描き、矩形の形にクリッピングパスを設定
             */
            p.rect(200, 200, 250, 250);
            p.clip();

            /* クリッピングパスをグラデーションで塗りつぶす */
            p.shfill(sh);

            /* カレントグラフィックステータスに復帰する */
            p.restore();

            /*
             * 円のグラデーション表示:
             * カレントグラフィックステータスを保存
             */
            p.save();

            /* 開始色として白を指定する */
            p.setcolor("fill", "rgb", 1.0, 1.0, 1.0, 0.0);

            /*
             * 終了色としてオレンジを指定する。
             * 円と同じサイズで同心円状のグラデーションを定義し、塗りつぶす。
             */
            sh = p.shading("radial", 400, 600, 400, 600, 1.0, 0.5, 0.1, 0.0,
                "r0 0 r1 60");

            /*
             * 円を描き、円の形にクリッピングパスを設定
             */
            p.circle(400, 600, 50);
            p.clip();

            /* クリッピングパスをグラデーションで塗りつぶす */
            p.shfill(sh);

            /* カレントグラフィックステータスに復帰する */
            p.restore();

            /*
             * テキストのグラデーション表示:
             * フォントをロードする
             */
            font = p.load_font("Helvetica-Bold", "unicode", "");

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

            p.setfont(font, fontsize);

            /* 開始色として白を指定する */
            p.setcolor("fill", "rgb", 1, 1, 1, 0);

            /*
             * 終了色としてオレンジを指定する。
             * テキストと同じサイズで線形のグラデーションを定義し、塗りつぶす。
             */
            sh = p.shading("axial", 50, 50, 50, 200, 1.0, 0.5, 0.1, 0.0, "");

            /*
             * シェーディングパターンを作成し、そのパターンを塗り色として設定する
             */
            pattern = p.shading_pattern(sh, "");
            p.setcolor("fill", "pattern", pattern, 0, 0, 0);

            /* グラデーションパターンでテキストを出力する */
            p.fit_textline("Hello World!", 50, 100, "");
            p.fit_textline("(says PDFlib GmbH)", 50, 100 - fontsize, "");

            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 - Jul 29, 2015)