1.1.5 テキスト注釈の作成

images/AppendAnnotText-top.png

狙い・効果

指定した内容のテキスト注釈を挿入します。

処理の概要

テキスト注釈はPDF内の指定した位置に付加される付箋メモのような注釈です。テキスト注釈には内容を設定したポップアップ注釈を付随して設定します。閉じているときはアイコンとして表示し、開いている場合はその付箋メモのテキストはポップアップウィンドウで表示されます。

本サンプルプログラムでは、入力PDFの1ページ目に指定した内容のテキスト注釈を挿入します。指定するのは注釈内のテキスト、注釈を追加したユーザ名、内容を説明する短い主題です。テキスト注釈の挿入位置については下から50mm,左から50mmの位置に、ポップアップについては(100, 50, 150, 150)の座標にある矩形に表示されます。

PDF Tool APIの主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class AppendAnnotText {
    // そのクラスの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 < 5)
        {
            printUsage();
            return;
        }

        String textContents = args[2];
        String userName = args[3];
        String subject = args[4];
        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, textContents, userName, subject);
                }
            }

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

    public static void addAnnotText(PtlPage page, String textContents, String userName,
                                    String subject)
        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(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);

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

プログラムファイル名

AppendAnnotText.java

入出力操作の例

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

C:\samples>java cookbook.AppendAnnotText blank.pdf blank-text-annot.pdf 注釈に表示するテキスト PDFCookBookVol.4 テキスト注釈 
-- 完了 --

次図は埋め込んだテキスト注釈のアイコンをダブルクリックしてポップアップ注釈を表示したところです。

テキスト注釈の作成