1.1.6 テキスト注釈のアイコンを設定する

images/AppendAnnotTextSetIcon-top.png

狙い・効果

指定した内容のテキスト注釈について、アイコンを指定した上で挿入します。

処理の概要

テキスト注釈を閉じたときは、PDF内の指定した位置にアイコンとして表示されます。このアイコンの形状を指定できます。

本サンプルプログラムでは、指定したアイコンのテキスト注釈を入力PDFの1ページ目に挿入します。アイコン以外に指定できる内容、テキスト注釈の挿入位置、ポップアップの位置については「1.1.5 テキスト注釈の作成」と同様です。

PDF Tool APIの主な機能

表1・6 テキスト注釈に設定可能なアイコンタイプ
ICON_COMMENT
コメント
ICON_HELP
ヘルプ
ICON_INSERT
テキスト挿入
ICON_KEY
キー
ICON_NEWPARAGRAPH
新規段落
ICON_NOTE
ノート
ICON_PARAGRAPH
段落

カスタムアイコンのためにICON_CUSTOMという定数が用意されています。カスタムアイコン (ICON_CUSTOM)の指定方法については、「参照先」を参照してください。また、未知のアイコンのためにICON_UNKNOWNという定数が用意されています。

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class AppendAnnotTextSetIcon {
    // そのクラスのusageを表示する関数
    private static void printUsage(){
            System.out.println("usage: java AppendAnnotText in-pdf-file out-pdf-file" +
                               " TextContents UserName Subject アイコン種別");
            System.out.println("TextContents : 注釈内に表示されるテキスト");
            System.out.println("UserName : 注釈を追加したユーザ名");
            System.out.println("Subject : 注釈の内容を説明する短い主題");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 6)
        {
            printUsage();
            return;
        }

        // コマンドライン引数の処理
        String textContents = args[2];
        String userName = args[3];
        String subject = args[4];
        String iconKind = args[5];
        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ページ目の取得
                    // テキスト注釈追加
                    addAnnotTextSetIcon(page, textContents, userName, subject, iconKind);
                }
            }

            // ファイルに保存します。
            doc.save(outputFile);
        }
	...【AppendAnnotStampDefault.javaと同じ処理のため省略
	  ・エラーメッセージ処理と出力】...
    }

    public static void addAnnotTextSetIcon(PtlPage page, String textContents,
                                           String userName, String subject, String iconKind)
        throws PtlException, Exception, Error {
        try (PtlAnnots annots = page.getAnnots(); // 注釈コンテナの取得
             PtlAnnotText annottext = new PtlAnnotText(); // PDFのテキスト注釈
             PtlAnnotPopup annotpopup = new PtlAnnotPopup()) {// ポップアップ注釈
             // アイコンタイプ設定 
            annottext.setIconType(PtlAnnotText.ICON_TYPE.valueOf(iconKind));

            // 矩形座標を設定 座標の単位は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(textContents);

            // 日時の設定(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(userName);
            // サブジェクトの短い説明設定
            annottext.setMarkUpSubj(subject);//Subjectが件名である可能性が非常に高い

            // 注釈生成日時の設定(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);
        }
    }
}

プログラムファイル名

AppendAnnotTextSetIcon.java

入出力操作の例

C:\samples>java cookbook.AppendAnnotTextSetIcon 
usage: java AppendAnnotText in-pdf-file out-pdf-file TextContents UserName Subject アイコン種別
TextContents : 注釈内に表示されるテキスト
UserName : 注釈を追加したユーザ名
Subject : 注釈の内容を説明する短い主題

C:\samples>java cookbook.AppendAnnotTextSetIcon blank.pdf blank-text-icon.pdf 注釈に表示するテキストとアイコンの例 PDFCookBookVol.4 テキスト注釈 ICON_HELP 
-- 完了 --

次図は貼り付けたHELPアイコンをダブルクリックしてポップアップ注釈を表示したところです。

テキスト注釈のアイコンを設定する