6.1.5 レイヤーのZオーダーの指定

6-1-第5項レイヤーのZオーダーを設定

狙い・効果

挿入するレイヤーのZオーダーを指定します。

処理の概要

挿入するレイヤーのZオーダーを指定し、6.1.1 レイヤーに使用するPDF文書ページを設定と同様にしてレイヤーを挿入します。Zオーダーは前面と背面の二つから選択します。

『PDF Tool API』の主な機能

PtlParamDrawLayer.APIsetZorder(int zorder): レイヤーのZオーダーを設定

Zオーダーは次表の列挙型定数で指定します。

表6・2 PtlParamDrawLayer.ZORDER レイヤーのZオーダー
列挙型定数説明
ZORDER_BACK背面
ZORDER_FRONT前面

設定しない場合はデフォルト値としてZORDER_FRONTが使用されます。

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class DrawLayerSetZorder {

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java DrawLayerSetZorder in-pdf-file out-pdf-file" +
                           " page-num insert-pdf-file page-num-to-insert set-z-order");
        System.out.println("set-z-order:");
        System.out.println("0:レイヤーのZオーダーをに背面する" +
                           " 1:レイヤーのZオーダーを前面にする");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 6) {
            printUsage();
            return;
        }

        // コマンドライン引数の判定
        boolean setZorder = true;
        try
        {
            setZorder =
                readBoolArgs(args[5], "set-z-order は 0か1で指定してください。");
        }
        catch (IllegalArgumentException ex) {
            System.out.println(ex.getMessage());
            printUsage(); // usageメッセージの表示
            return;
        }

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlParamOutput outputFile = new PtlParamOutput(args[1]);
             PtlPDFDocument doc = new PtlPDFDocument()) {
            // PDFファイルをロードします。
            doc.load(inputFile);
            // コマンドライン引数の判定
            int pageToAdd = Integer.parseInt(args[2]);
            int numPages = doc.getPageCount();
            System.out.println("ページ数:" + numPages);
            if((numPages < 0)||(numPages < pageToAdd)) {
                System.err.println("page-numは入力PDFの全ページ数よりも小さい正の値を" +
                                   "指定してください。");
                return;
            }
            String insertPDFPath = args[3];
            int insertPageNum = Integer.parseInt(args[4]);

            try (PtlPages pages = doc.getPages()) { // ページコンテナの取得
                // ページコンテナが空かどうか
                if (pages.isEmpty()) {
                    System.out.println("ページコンテナが空");
                    return;
                }

                // ページの取得(パラメータindexは0が先頭のため1を引く)
                try (PtlPage page = pages.get(pageToAdd - 1)) {
                    //レイヤーの描画
                    drawLayerSetShow(page, insertPDFPath, insertPageNum, setZorder);
                }
            }

            // ファイルに保存します。
            doc.save(outputFile);
        }

	...【ExtractText.javaと同じ処理のため省略
	 ・エラーメッセージ処理と出力】...

    }

    public static void drawLayerSetShow(PtlPage page, String insertPDFPath,
                                        int insertPageNum, boolean setZorder)
        throws PtlException, Exception, Error {
        try (PtlSize pageSize = page.getSize();    // ページサイズ
             PtlContent content = page.getContent(); // ページコンテントの取得
             PtlPDFDocument docToInsert = new PtlPDFDocument();
             //挿入するPDF
             PtlParamInput inputFileToInsert = new PtlParamInput(insertPDFPath);
             // 描画矩形の指定(PDFいっぱいに指定)
             PtlRect rect = new PtlRect(0.0f,
                                        0.0f,
                                        pageSize.getWidth(),
                                        pageSize.getHeight())) { 
            // PDFファイルをロードします。
            docToInsert.load(inputFileToInsert);

            try (PtlPages pagesToInsert = docToInsert.getPages()) { // ページコンテナの取得
                // ページコンテナが空かどうか
                if (pagesToInsert.isEmpty()) {
                    System.out.println("ページコンテナが空");
                    return;
                }

                // ページの取得(パラメータindexは0が先頭のため1を引く)
                // レイヤーのパラメーターの取得
                try (PtlPage pageInsert = pagesToInsert.get(insertPageNum - 1);
                     PtlParamDrawLayer param = new PtlParamDrawLayer()) {
                    // レイヤーの配置のZオーダーを設定
                    if(setZorder){
                        param.setZorder(PtlParamDrawLayer.ZORDER.ZORDER_FRONT);
                    }else{
                        param.setZorder(PtlParamDrawLayer.ZORDER.ZORDER_BACK);
                    }

                    // レイヤーにするページ
                    param.setPage(pageInsert);
                    // レイヤーの名前
                    param.setName("Layer1");
                    // レイヤーの表示/非表示を指定
                    param.setShow(PtlParamDrawLayer.SHOW.SHOW_ON);
                    // レイヤーの描画
                    content.drawLayer(rect, PtlContent.ALIGN.ALIGN_CENTER, param);
                }
            }
        }
    }

    /**
     * 0または1を入力されたargsにより、trueまたはfalseを返すメソッド。
     * 
     * @param args 与えられるコマンドライン引数。0または1でtrueまたはfalseを指定する。
     * @param errorMessage argsが0か1でなかった場合に出力されるエラーメッセージを指定する。
     * @return argsの数値を読み取った結果を戻す
     * @throws java.lang.IllegalArgumentException argsが0か1でなかった場合に発生。
     */
    public static boolean readBoolArgs(String args, String errorMessage)
        throws IllegalArgumentException {

	...【ExtractTextSetRect.javaと同じ処理のため省略】...

    }
}

プログラムファイル名

DrawLayerSetZorder.java

入出力操作の例

C:\samples>>java cookbook.DrawLayerSetZorder 
usage: java DrawLayerSetZorder in-pdf-file out-pdf-file page-num insert-pdf-file page-num-to-insert set-z-order
set-z-order:
0:レイヤーのZオーダーをに背面する 1:レイヤーのZオーダーを前面にする

C:\samples>>java cookbook.DrawLayerSetZorder novelText.pdf DrawLayerSetZorder0.pdf 1 AHLogo.pdf 1 0 
ページ数:2
-- 完了 --

C:\samples>>java cookbook.DrawLayerSetZorder novelText.pdf DrawLayerSetZorder1.pdf 1 AHLogo.pdf 1 1 
ページ数:2
-- 完了 --

次の図は左がレイヤーのZオーダーを背面に、右が前面に指定した結果です。

6-1-5 レイヤーのZオーダーを設定(例)