3.1.3 しおりの削除

images/RemoveOutline-top.png

狙い・効果

PDF文書のしおりを削除します。

処理の概要

PDF文書にしおりが付いているかどうかを調べます。しおりがついていれば最初の子供を探します。その兄弟や子供を探して順次アクションやしおりそのものを削除します。本プログラムでは以下の動作をします。

PDF Tool APIの主な機能

プログラム例

package cookbook;

import jp.co.antenna.ptl.*;

public class RemoveOutline {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 2)
        {
            System.out.println("usage: java RemoveOutline in-pdf-file out-pdf-file");
            return;
        }
        ...【WaterMarkSetMargin.javaと同じ処理のため省略
             ・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード
             ・PtlParamOutputを用いて出力PDF名を指定】...

            // アウトラインを持っているかどうか
            if (!doc.hasOutlines())
            {
                System.out.println("アウトラインを持っていない!");
                return;
            }

            try (PtlOutline rootOutline = doc.getRootOutline()) {
                if (rootOutline.hasChild()) {
                    try (PtlOutline outline = rootOutline.getFirstChild()) { //最初の子アウトラインの取得
                        removeOutline(outline);
                    }
                }
            }
        ...【EncryptWithUserPass.javaと同じ処理のため省略
             ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力
             ・PtlException, Exception, Error を catchするエラー処理
             ・finally文で"--完了--"と表示する処理】...
    }

    static void removeOutline(PtlOutline item) throws PtlException, Exception, Error
    {
        // 最初の子アウトラインの取得
        System.out.println("- " + item.getTitle());
        // アクションの削除
        System.out.println("「" + item.getTitle() + "」のアクションを削除...");
        item.removeAction();

        // 次の兄弟アウトラインの取得
        try (PtlOutline item2 = item.getNextSibling())
        {
            System.out.println("- " + item2.getTitle());
            // 子アウトラインの削除
            System.out.println("「" + item2.getTitle() + "」の子しおりを削除...");
            item2.removeChildren();

            // 次の兄弟アウトラインの取得
            try (PtlOutline item3 = item2.getNextSibling())
            {
                System.out.println("- " + item3.getTitle());
                // 自分自身及び子アウトラインの削除
                System.out.println("「" + item3.getTitle() + "」と子しおりを削除...");
                item3.destroy();
            }
        }
    }
}

プログラムファイル名

RemoveOutline.java

入出力操作の例

images/RemoveOutline.png

「はじめに」のアクションが削除され、「目次」の子しおりと「第1章 タグ付きPDFとはなにか」自体とその子しおりが削除されたPDF文書を出力します。