/*
    Antenna House PDF Tool API V7.0
    Java Interface sample program

    概要：テキスト注釈の作成

    Copyright 2015-2021 Antenna House, Inc.
*/

package Sample;

import jp.co.antenna.ptl.*;

public class AppendAnnotText {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 2)
        {
            System.out.println("usage: java AppendAnnotText in-pdf-file out-pdf-file");
            return;
        }

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlParamOutput outputFile = new PtlParamOutput(args[1]);
             PtlPDFDocument doc = new PtlPDFDocument())
        {
            // PDFファイルをロードします。
            doc.load(inputFile);

            try (PtlPages pages = doc.getPages()) // ページコンテナの取得
            {
                // ページコンテナが空かどうか
                if (pages.isEmpty())
                {
                    System.out.println("ページコンテナが空\n");
                    return;
                }

                try (PtlPage page = pages.get(0)) // 1ページ目の取得
                {
                    // テキスト注釈追加
                    addAnnotText(page);
                }
            }

            // ファイルに保存します。
            doc.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("-- 完了 --");
        }
    }

    public static void addAnnotText(PtlPage page) throws PtlException, Exception, Error
    {
        try (PtlAnnots annots = page.getAnnots(); // 注釈コンテナの取得
             PtlAnnotText annottext = new PtlAnnotText(); // PDFのテキスト注釈
             PtlAnnotPopup annotpopup = new PtlAnnotPopup()) // ポップアップ注釈
        {
             // アイコンタイプ設定 ICON_COMMENT = 1, /* コメント */
            annottext.setIconType(PtlAnnotText.ICON_TYPE.ICON_COMMENT);

            // 矩形座標を設定 座標の単位はmmで原点(0,0)は左下
            try (PtlRect rectSize = annottext.getRect();
                 PtlRect rectAnnot = new PtlRect(50.0f, 50.0f, 50.0f+rectSize.getRight(), 50.0f+rectSize.getTop()))
            {
                annottext.setRect(rectAnnot);
            }

            // 内容を設定（注釈用に表示されるテキスト・可読な形式での注釈コンテンツの代替説明）
            annottext.setTextContents("内容を設定（注釈用に表示されるテキスト・可読な形式での注釈コンテンツの代替説明）");

            // 日時の設定(2013/01/01 00:00:00)
            try (PtlDate date = new PtlDate(2013, 1, 1, 0, 0, 0))
            {
                annottext.setDate(date);
            }

            // 注釈フラグを設定（論理和） FLAG_NOROTATE = 0x00000010, /* 注釈の外観をページにあわせて回転しません。 */
            annottext.setAnnotFlags(PtlAnnotText.FLAG_NOROTATE);

            // 色を設定 setColor(const PtlColorDeviceRGB& color);
            try (PtlColorDeviceRGB color =  new PtlColorDeviceRGB(0.0f, 0.0f, 1.0f))
            {
                annottext.setColor(color);
            }

            // 境界線スタイルを設定 BORDER_SOLID = 1, /* 実線(注釈を囲む実線の矩形) */
            annottext.setBorderStyle(PtlAnnotText.BORDER_STYLE.BORDER_SOLID);

            // 境界線幅を設定 BORDER_WIDTH_THIN = 1, /* 細い */
            annottext.setBorderWidth(PtlAnnotText.BORDER_LINE_WIDTH.BORDER_WIDTH_THIN);

            // ポップアップウィンドウのタイトル文字列設定
            annottext.setMarkUpTitle("ポップアップウィンドウのタイトル文字列");

            // サブジェクトの短い説明設定
            annottext.setMarkUpSubj("サブジェクトの短い説明設定");

            // 注釈生成日時の設定(2012/12/31 23:59:59)
            try (PtlDate dateMarkup = new PtlDate(2012, 12, 31, 23, 59, 59))
            {
                annottext.setMarkUpDate(dateMarkup);
            }

            // 不透明度を設定 0.0 ～ 1.0。0.0が透明、1.0が不透明
            annottext.setMarkUpCA(0.8f);

            // ポップアップ
            // 矩形座標を設定 座標の単位はmmで原点(0,0)は左下
            try (PtlRect rectPopup = new PtlRect(100.0f, 50.0f, 150.0f, 150.0f))
            {
                annotpopup.setRect(rectPopup);
            }

            // オープン状態を設定 true=オープン状態、 false=クローズ状態
            annotpopup.setOpenState(true);

            // ポップアップ注釈を設定
            annottext.setAnnotPopUp(annotpopup);

            // 注釈の追加
            annots.append(annottext);
        }
    }
}
