1.3.1 注釈の削除

images/RemoveAnnots-top.png

狙い・効果

PDFドキュメントから指定した注釈を削除します。

処理の概要

ページ番号とインデックス番号を指定することで指定した注釈を削除できます。また、全ての注釈の削除も可能です。インデックス番号とは指定したページの注釈コンテナに順に格納された注釈を指定するために振られた番号のことです。注釈コンテナ等、PDF Tool APIの注釈情報の取り扱いについて詳しくは「1.2.1 注釈の個数・全ての注釈に共通した項目の情報を取得」を参照してください。

本サンプルプログラムでは、1ページ目に含まれる注釈についてインデックス番号で指定した注釈、もしくはページの全ての注釈を削除します。

PDF Tool APIの主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class RemoveAnnots {
    // そのクラスのusageを表示する関数
    public static void printUsage(){
        System.out.println("usage: java RemoveAnnots in-pdf-file" +
                           " out-pdf-file 削除したい注釈の指定");
        System.out.println("削除したい注釈の指定");
        System.out.println("0 : 全注釈の削除 0以外 : 指定したindex番号の削除");
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 3)
        {
            printUsage();
            return;
        }
        int annotNumToRemove = Integer.parseInt(args[2]);

        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ページ目の取得
                     PtlAnnots annots = page.getAnnots()) {

                    // 注釈コンテナが空かどうか
                    if (annots.isEmpty()) {
                        System.out.println("注釈なし");
                    }
                    else
                    {
                        // 注釈数の取得
                        int numAnnots = annots.getCount();
                        System.out.println("注釈数 : " + numAnnots);
                        if (numAnnots == 0) {
                            System.out.println("このPDFには注釈は含まれておりません。");
                            return;
                        }

                        // 注釈の削除判定
                        switch (annotNumToRemove) {
                        case 0:
                            // 全注釈の削除
                            annots.removeAll();
                            break;
                        default:
                            if(numAnnots < annotNumToRemove){
                                System.out.println("削除する注釈のindex番号は" +
                                        "注釈数より少ないものを指定してください。");
                                return;
                            }
                            // 指定された添付ファイルの削除
                            // remove()メソッドのパラメータindexは0スタートのため、
                            // annotNumToRemoveから-1しています。
                            // 注釈の削除
                            annots.remove(annotNumToRemove - 1);
                            break;
                        }
                    }
                }
            }

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

プログラムファイル名

RemoveAnnots.java

入出力操作の例

C:\samples>java cookbook.RemoveAnnots 
usage: java RemoveAnnots in-pdf-file out-pdf-file 削除したい注釈の指定
削除したい注釈の指定
0 : 全注釈の削除 0以外 : 指定したindex番号の削除

C:\samples>java cookbook.RemoveAnnots annots.pdf remove-all.pdf 0 
注釈数 : 10
-- 完了 --