/*
    Antenna House PDF Tool API V8.0
    Java Interface sample program

    概要：ページ抽出２

    Copyright 2015-2025 Antenna House, Inc.
*/

package Sample;

import jp.co.antenna.ptl.*;

public class ExtractPage_2 {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

        if (args.length < 2)
        {
            System.out.println("usage: java ExtractPage_2 in-pdf-file out-folder");
            return;
        }

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
    		PtlParamOutput outputFile = new PtlParamOutput(args[1]);
			PtlPDFDocument doc = new PtlPDFDocument())
        {
            // PDFファイルをロード
            doc.load(inputFile);

            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 = 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_NONE  = 0x00000000 オプションはありません。
                int insertoption = PtlPages.OPTION_NONE;
                
                 // 出力ページ範囲
                String pageRange = (String)args[2];
                String[] Ranges = pageRange.split(",");
                int rc = Ranges.length;
                for (int i = 0; i < rc; i++)
                {
                	String tmp = Ranges[i];
                    if (tmp.contains("-"))
                    {
                    	String[] pg = tmp.split("-");
                        int tmpStrt = Integer.parseInt(pg[0]);
                        int tmpEnd = Integer.parseInt(pg[1]);

                        // ページの追加(tmpStrtページからtmpEndページ)
                        pages.append(doc, tmpStrt, (tmpEnd - tmpStrt + 1), insertoption);
                    }
                    else
                    {
                        int tmpStrt = Integer.parseInt(tmp);
                        // ページの追加(tmpStrtページから1P)
                        pages.append(doc, tmpStrt, 1, insertoption);
                    }
                }

                // ファイルに保存します。
                doc_ext.save(outputFile);
            }
        }
        catch (PtlException pex) {
             System.out.println("PtlException : ErrorCode = " + pex.getErrorCode() + "\n  " + pex.getErrorMessage());
        }
        catch (Exception ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        catch (Error ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        finally {
            System.out.println("-- 完了 --");
        }
	}

}
