1.1.7 ページの移動

PDFCookBookアートボード 6

狙い・効果

PDF文書のページを移動PDF文書の指定したページ範囲を指定した位置に移動します。

処理の概要

PDF文書の中の移動対象とするページ範囲と、その範囲を移動する位置を指定します。

PDF文書を読み込み、指定した範囲と移動先が妥当かどうかを確認します。

妥当であればPDF文書の中の指定範囲を移動します。

結果のPDF文書を保存します。

『PDF Tool API』の主な機能

この例では次の機能を使っています。

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class MovePages {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 5)
        {
            System.out.println("usage: java MovePages in-pdf-file out-pdf-file move-start-page move-end-page where-to-move");
            System.out.println("move-start-page から move-end-page までの範囲を対象に、where-to-move の後ろへページを移動させます。");
            System.out.println("1ページ目より前へ移動させたい場合は where-to-move に0を指定してください。");
            return;
        }
        int moveStart = Integer.parseInt(args[2]);
        int moveEnd = Integer.parseInt(args[3]);
        if((moveStart < 1)||(moveEnd < 1))
        {
            System.err.println("move-start-page, move-end-pageは正の値を入力してください。");
            return;
        }

        ...【AppendPages.javaと同じ処理のため省略
             ・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード
             ・PtlParamOutputを用いて出力PDF名を指定】...

            int whereToMove = Integer.parseInt(args[4]);
            if((whereToMove < 0)||(whereToMove > doc.getPageCount()))
            {
                System.err.println("where-to-moveは0からPDFのページ数までを指定してください。");
                return;
            }

        ...【RemovePages.javaと同じ処理のため省略
             ・doc.getPages()メソッドを用いてPtlPages pagesにページコンテナを取得
             ・ページコンテナが空だった場合にエラーを出力して終了】...

                //移動ページ数の取得
                int movingPages = moveEnd - moveStart + 1;
                if(movingPages < 1)
                {
                    System.err.println("move-start-pageより小さいmove-end-pageを指定することはできません。");
                    return;
                }


                if((moveStart <= whereToMove) && (whereToMove < moveEnd))
                {
                    System.err.println("where-to-moveは、move-start-pageとmove-end-pageの間で指定することはできません。");
                    return;
                }

                // ページの追加
                if(whereToMove == doc.getPageCount())   //最終ページの後ろに挿入指定の場合
                {
                    pages.move(PtlPages.INSERT_LAST, moveStart - 1, movingPages);
                }
                else    //それ以外
                {
                    // PtlPages.move() のパラメータfromNumは0スタートのため、1引いています。
                    pages.move(whereToMove, moveStart - 1, movingPages);
                }

        ...【AppendPages.javaと同じ処理のため省略
             ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力
             ・PtlException, Exception, Error を catchするエラー処理
             ・finally文で"--完了--"と表示する処理】...

    }
}

サンプルファイル名

MovePages.java

入出力操作の例

C:\samples>java cookbook.MovePages 
usage: java MovePages in-pdf-file out-pdf-file move-start-page move-end-page where-to-move
move-start-page から move-end-page までの範囲を対象に、where-to-move の後ろへページを移動させます。
1ページ目より前へ移動させたい場合は where-to-move に0を指定してください。

C:\samples>java cookbook.MovePages testPages_10.pdf testPages-moveP6-8to2.pdf 6 8 2 
-- 完了 --

6~8ページ目を2ページ目の後ろに移動した例。