PDF文書のしおりを削除します。
しおりの削除では、
が選択できます。
手順としては、PDF文書にしおりが付いているかどうかを調べます。しおりがついていれば最初の子供を探します。その兄弟や子供を探して順次アクションやしおりそのものを削除します。
本プログラムでは以下の動作をします。
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("このPDFにはアウトラインがありません。"); 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
「はじめに」のアクションが削除され、「目次」の子しおりと「第1章 タグ付きPDFとはなにか」自体とその子しおりが削除されたPDF文書を出力します。