1.1.4 ページの削除

PDFCookBookアートボード 4

狙い・効果

PDF文書から指定した範囲のPDF文書のページを削除ページを削除します。

処理の概要

PDF文書と削除するページ範囲を入力します。

PDF文書の中から指定したページ範囲を削除(※)して、新しいPDF文書として保存します。

注記

※:パラメータの指定で全ページの削除も可能です。ただし、全てのページを削除した状態で保存しようとすると、PDFとして成り立たずエラーになる点に注意が必要です。

全ページ削除機能は例えば以下のような使われ方を想定した機能です。

全ページ削除をするとページのデータは無くなりますが文書情報は残ります。そのため、既存の文書情報を引き継いだPDFを新しく作る目的で、元のページを全て削除した上で別のページを挿入する際などで役立つ指定です。

『PDF Tool API』の主な機能

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

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class RemovePages {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 3)
        {
            System.out.println("usage: java RemovePages in-pdf-file out-pdf-file  remove-start-page remove-end-page");
            System.out.println("remove-start-pageに\ "0\ "を入力した場合、\ "全ページの消去\ "を実行します。");
            System.out.println("ただし、全てのページを削除したらPDFとして成り立たないため、エラーとなります。");
            return;
        }
        int removeStart = Integer.parseInt(args[2]);
        if(removeStart < 0)
        {
            System.err.println("remove-start-page には0以上の値を入力してください。");
            System.err.println("usage: java RemovePages in-pdf-file out-pdf-file remove-start-page remove-end-page");
            System.err.println("remove-start-pageに\ "0\ "を入力した場合、\ "全ページの消去\ "を実行します。");
            System.out.println("ただし、全てのページを削除したらPDFとして成り立たないため、エラーとなります。");
            return;
        }


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


            // ページ数の取得
            System.out.println("ページ数:" + doc.getPageCount());

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

                //削除処理
                if(removeStart == 0) //removeAll の指定。
                {
                    pages.removeAll(); // このままsaveするとエラーになります
                }
                else
                {
                    //削除ページ数の算出
                    int removeEnd = Integer.parseInt(args[3]);
                    int pagesToRemove = removeEnd - removeStart + 1;
                    if(pagesToRemove <= 0)
                    {
                    	System.err.println("remove-end-page は remove-start-page より小さい値は指定できません。");
                        return;
                    }
                    //ページの削除
                    //PtlPages.remove() のパラメータindexは0スタートのため、removeStartから-1しています。
                    pages.remove(removeStart - 1, pagesToRemove);
                }

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

    }
}

サンプルファイル名

RemovePages.java

入出力操作の例

C:\samples>java cookbook.RemovePages 
usage: java RemovePages in-pdf-file out-pdf-file  remove-start-page remove-end-page
remove-start-pageに"0"を入力した場合、"全ページの消去"を実行します。
ただし、全てのページを削除したらPDFとして成り立たないため、エラーとなります。

C:\samples>java cookbook.RemovePages testPages_10.pdf removed-2-6.pdf 2 6 
ページ数:10
-- 完了 --