1.1.3 ページの抽出

PDFCookBookアートボード 2

狙い・効果

PDF文書から指定した範囲のPDF文書のページを抽出ページを抽出して、新しいPDF文書として保存します。

処理の概要

  1. PDF文書から抽出する範囲を開始ページ番号~終了ページ番号で指定します。
  2. PDF文書を読み込み、文書のプロパティを取得します。
  3. 出力側PDF文書のプロパティを作成します。
  4. PDF文書の文書情報のタイトル、著者などを出力側PDFの文書情報に設定します。
  5. ページ挿入オプションを設定します。
  6. 指定したページ範囲を出力側PDF文書に追加します。
  7. 抽出した結果を新しいPDF文書として保存します。

PDF Tool APIの主な機能

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

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class ExtractPages {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 4)
        {
            System.out.println("usage: java ExtractPage in-pdf-file out-pdf-file start-page end-page");
            return;
        }

        int startPage = Integer.parseInt(args[2]);
        int endPage = Integer.parseInt(args[3]);
        int pagesToPrint = endPage - startPage + 1;
        if(pagesToPrint < 1)
        {
            System.err.println("ERROR: End-page number should be bigger than start-page number");
            return;
        }


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

            try (PtlDocProperty docproperty = doc.getDocProperty();// 文書プロパティの取得
                 PtlDocInfo docinfo = docproperty.getDocInfo();    // 文書情報の取得
                 PtlPDFDocument doc_ext = new PtlPDFDocument();
                 PtlDocProperty docproperty_ext = doc_ext.getDocProperty(); // 出力側文書プロパティの取得
                 PtlDocInfo docinfo_ext = docproperty_ext.getDocInfo();     // 出力側文書情報の取得
                 PtlPages pages_ext = doc_ext.getPages())
            {
                // タイトルをコピー
                docinfo_ext.setTitle(docinfo.getTitle());

                // 著者をコピー
                docinfo_ext.setAuthor(docinfo.getAuthor());

                // サブジェクトをコピー
                docinfo_ext.setSubject(docinfo.getSubject());

                // キーワードをコピー
                docinfo_ext.setKeywords(docinfo.getKeywords());

                // クリエータをコピー
                docinfo_ext.setCreator(docinfo.getCreator());

                // プロデューサをコピー
                docinfo_ext.setProducer(docinfo.getProducer());

                // 作成日付をコピー
                try (PtlDate dateCreate = docinfo.getCreationDate())
                {
                    docinfo_ext.setCreationDate(dateCreate);
                }

                // 更新日付をコピー
                try (PtlDate dateMod = docinfo.getModDate())
                {
                    docinfo_ext.setModDate(dateMod);
                }

                // ページ挿入オプション
                // OPTION_COPY_OUTLINES = 0x00000004 ページ挿入時にあわせてしおりをコピーします。
                // OPTION_COPY_ATTACHEDFILES    = 0x00000008ページ挿入時にあわせて添付ファイルをコピーします。
                int insertoption = PtlPages.OPTION_COPY_OUTLINES | PtlPages.OPTION_COPY_ATTACHEDFILES;

                // ページの追加
                // PtlPages.append() のパラメータfromNumは0スタートのため、startPageから1引いています。
                pages_ext.append(doc, startPage - 1, pagesToPrint, insertoption);

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

    }
}

サンプルファイル名

ExtractPages.java

入出力操作の例

ExtractPages