10.5.1 角度設定(レイヤー描画)

DrawLayerSetFreeAngle_Top

狙い・効果

角度指定レイヤーを設定する際に任意の角度に傾けて描画します。

処理の概要

レイヤーを設定する際に任意の角度を指定して傾けることができます。
PtlParamDrawLayer.setAngle()を呼び出すことで指定します。角度は度数法で表し、反時計回りに指定した角度の分だけ傾きます。

90度刻みで指定するsetRotate()とは異なり、小数を含む任意の細かい角度に指定することが可能です。 PtlParamDrawLayerで角度以外の要素を指定する場合、他の関数よりも先に角度を設定する必要があります。(レイヤー機能及びレイヤーの設定に関する詳細は「『PDF CookBook』(第3巻)6. レイヤー作成」の各項を参照してください)

サンプルプログラムでは、入力PDFに指定したPDFをレイヤーとして挿入します。このとき、引数で指定した角度に傾けて挿入します。

『PDF Tool API』の主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class DrawLayerSetFreeAngle {

    // そのクラスのusageを表示する関数
    private static void printUsage() {
        System.out.println("usage: java DrawLayerSetFreeAngle in-pdf-file" +
                           " out-pdf-file page-num insert-pdf-file" +
                           " page-num-to-insert free-angle");
        System.out.println("free-angle:");
        System.out.println("回転する角度。任意の数値で指定。");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 5) {
            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の全ページ数よりも小さい正の値を" +
                                   "指定してください。");
                printUsage();
                return;
            }
            String insertPDFPath = args[3];
            int insertPageNum = Integer.parseInt(args[4]);
            float angle = Float.parseFloat(args[5]);

            try (PtlPages pages = doc.getPages()) { // ページコンテナの取得
                // ページコンテナが空かどうか
                if (pages.isEmpty()) {
                    System.out.println("ページコンテナが空");
                    return;
                }
                // 書き込み先ページを取得(パラメータindexは0が先頭のため1を引く)
                try (PtlPage page = pages.get(pageToAdd - 1)) {
                    //レイヤーの描画
                    drawLayerSetFreeAngle(page, insertPDFPath, insertPageNum, angle);
                }
            }

            // ファイルに保存します。
            doc.save(outputFile);
        }
	...【GetPDFVersion.javaと同じ処理のため省略
	   ・エラーメッセージ処理と出力】...
    }

    public static void drawLayerSetFreeAngle(PtlPage page, String insertPDFPath,
                                                 int insertPageNum, float angle)
        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()) {
                    // レイヤーの回転角度を指定
                    param.setAngle(angle);

                    // レイヤーにするページ
                    param.setPage(pageInsert);
                    // レイヤーの名前
                    param.setName("挿入したレイヤー(前面)");
                    // レイヤーを前面に
                    param.setZorder(PtlParamDrawLayer.ZORDER.ZORDER_FRONT);
                    // レイヤーを表示
                    param.setShow(PtlParamDrawLayer.SHOW.SHOW_ON);
                    // レイヤーの描画
                    content.drawLayer(rect, PtlContent.ALIGN.ALIGN_CENTER, param);
                }
            }
        }
    }
}

プログラムファイル名

DrawLayerSetFreeAngle.java

入出力操作の例

C:\samples>java cookbook.DrawLayerSetFreeAngle 
usage: java DrawLayerSetFreeAngle in-pdf-file out-pdf-file page-num insert-pdf-file page-num-to-insert free-angle
free-angle:
回転する角度。任意の数値で指定。

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

この操作例では入力PDF「novelText.pdf」(図10.6 左)に、アンテナハウスのロゴPDFを「挿入したレイヤー(前面)」(図10.6 右)として、角度を45度に指定して挿入し、PDFを出力しています(図10.7)。

5-10-5-1_DrawLayerSetFreeAngle

図10.6 入力PDFとレイヤーとして挿入するPDF

出力PDFを開くと、ページ上で45度にロゴが傾いていること、レイヤー表示では「挿入したレイヤー(前面)」レイヤーが確認できます。

5-10-5-1_DrawLayerSetFreeAngle_03

図10.7 操作例で出力されたPDF