PDFを開いたときの動作を指定します。
PDFを開いた時のアクションまたは移動先(ページ、位置、倍率)を指定します。これにより、PDFを開いたときに特定のページの特定の位置だけを拡大するように指定したり、開いた際のアクションを指定できます。指定できるアクション及び宛先の型についての詳細は「1.1.4 リンク注釈の追加」を参照してください。PDFを開いた時の移動先の指定方法について、アクションを指定する関数でGoToアクションを指定する方法、移動先を指定する関数を用いる方法の両方がありますが、出力PDFには後に設定した方の宛先が反映されます。
本サンプルプログラムでは、入力PDFにPDFを開いた際の移動先(ページ、位置、倍率)を設定したものを出力します。「移動先の型、ページ、topの値、leftの値、bottomの値、rightの値、倍率」を引数で指定します。引数で指定したtop、left、bottom、rightの値と倍率のうち、移動先の型で使用するものだけを読み取り、残りは読み飛ばされます。
以下のサブクラスがあります。宛先の型についての詳細は、表1・5 宛先の型を参照してください。
package cookbook; import jp.co.antenna.ptl.*; public class SetOpenAction { // そのクラスのusageを表示する関数 private static void printUsage() { System.out.print("usage: java SetOpenAction in-pdf-file out-pdf-file"); System.out.println(" ページ表示の種類 開くページ [top left bottom right zoom]"); System.out.println("ページ表示の種類: "); System.out.println("0 : Fit型 ページ全体がウィンドウに収まるように表示する"); System.out.println("1 : FitB型 境界ボックス全体がウィンドウに収まるように表示する"); System.out.println("2 : FitBH型 topを指定し、" + "境界ボックスの幅がウィンドウに収まるように表示する"); System.out.println("3 : FitBV型 leftを指定し、" + "境界ボックスの高さがウィンドウに収まるように表示する"); System.out.println("4 : FitH型 topを指定し、" + "ページの幅がウィンドウに収まるように表示する"); System.out.println("5 : FitR型 top, left, bottom, rightを指定し、" + "指定した範囲がウィンドウに収まるように表示する"); System.out.println("6 : FitV型 leftを指定し、" + "ページの幅がウィンドウに収まるように表示する"); System.out.println("7 : XYZ型 top, left, zoomを指定し、" + "ウィンドウ左上が指定したページ座標になるようにして" + "指定したzoom率で表示する"); System.out.println("※ : top, left, bottom, right, zoomに関しては" + "ページ表示の種類によって不要な項目は読み飛ばされます。"); System.out.println("例えば、FitV型を指定してleftの値だけを指定する場合は" + "topから順に\ "0 15\ "、XYZ型を指定してzoomの値を設定する場合は" + "topから順に \ "100 15 0 0 1.2\ "のように" + "読み飛ばす部分に仮の値を挿入してください。)"); } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 4) { printUsage(); return; } // コマンドライン引数の読み取り int page = Integer.parseInt(args[3]); float top = Float.parseFloat(args[4]); float left = Float.parseFloat(args[5]); float bottom = Float.parseFloat(args[6]); float right = Float.parseFloat(args[7]); float zoom = Float.parseFloat(args[8]); //ページ表示の種類が誤った数値だった場合に停止する。 int destType = Integer.parseInt(args[2]); if (destType < 0 || 7 < destType){ System.out.println("ページ表示の種類は0~7の数値で指定して下さい。"); printUsage(); return; } try (PtlParamInput inputFile = new PtlParamInput(args[0]); PtlParamOutput outputFile = new PtlParamOutput(args[1]); PtlPDFDocument doc = new PtlPDFDocument()) { // PDFファイルをロードします。 doc.load(inputFile); try (PtlDocProperty docProperty = doc.getDocProperty(); // PDFの文書プロパティ PtlOpenMode openmode = docProperty.getOpenMode()) { // 開き方の取得 // ページモードの設定 ページレイアウトの設定 // 各オープンアクションの設定 if(destType == 0){ //Fit型 try (PtlActionGoTo act = new PtlActionGoTo(); // 設定するGoToアクション PtlDestFit dst = new PtlDestFit()) { // PDFの宛先 // 宛先ページの設定 // 最初に開くページを設定(ページ番号は0ベース) dst.setPageNumber(page); // 宛先をGoToActionに設定 act.setDest(dst); openmode.setOpenAction(act); } } if(destType == 1){ //FitB型 try (PtlActionGoTo act = new PtlActionGoTo(); // 設定するGoToアクション PtlDestFitB dst = new PtlDestFitB()) { // PDFの宛先 // 宛先ページの設定 // 最初に開くページを設定(ページ番号は0ベース) dst.setPageNumber(page); // 宛先をGoToActionに設定 act.setDest(dst); openmode.setOpenAction(act); } } if(destType == 2){ //FitBH型 try (PtlActionGoTo act = new PtlActionGoTo(); // 設定するGoToアクション PtlDestFitBH dst = new PtlDestFitBH()) { // PDFの宛先 // 宛先ページの設定 // 最初に開くページを設定(ページ番号は0ベース) dst.setPageNumber(page); // 開く座標の設定 // topの設定 dst.setTop(top); // 宛先をGoToActionに設定 act.setDest(dst); openmode.setOpenAction(act); } } if(destType == 3){ //FitBV型 try (PtlActionGoTo act = new PtlActionGoTo(); // 設定するGoToアクション PtlDestFitBV dst = new PtlDestFitBV()) { // PDFの宛先 // 宛先ページの設定 // 最初に開くページを設定(ページ番号は0ベース) dst.setPageNumber(page); // 開く座標の設定 // leftの設定 dst.setLeft(left); // 宛先をGoToActionに設定 act.setDest(dst); openmode.setOpenAction(act); } } if(destType == 4){ //FitH型 try (PtlActionGoTo act = new PtlActionGoTo(); // 設定するGoToアクション PtlDestFitH dst = new PtlDestFitH()) { // PDFの宛先 // 宛先ページの設定 // 最初に開くページを設定(ページ番号は0ベース) dst.setPageNumber(page); // 開く座標の設定 // topの設定 dst.setTop(top); // 宛先をGoToActionに設定 act.setDest(dst); openmode.setOpenAction(act); } } if(destType == 5){ //FitR型 try (PtlActionGoTo act = new PtlActionGoTo(); // 設定するGoToアクション PtlDestFitR dst = new PtlDestFitR()) { // PDFの宛先 // 宛先ページの設定 // 最初に開くページを設定(ページ番号は0ベース) dst.setPageNumber(page); // 開く座標の設定 // topの設定 dst.setTop(top); // leftの設定 dst.setLeft(left); // bottomの設定 dst.setBottom(bottom); // rightの設定 dst.setRight(right); // 宛先をGoToActionに設定 act.setDest(dst); openmode.setOpenAction(act); } } if(destType == 6){ //FitV型 try (PtlActionGoTo act = new PtlActionGoTo(); // 設定するGoToアクション PtlDestFitV dst = new PtlDestFitV()) { // PDFの宛先 // 宛先ページの設定 // 最初に開くページを設定(ページ番号は0ベース) dst.setPageNumber(page); // 開く座標の設定 // leftの設定 dst.setLeft(left); // 宛先をGoToActionに設定 act.setDest(dst); openmode.setOpenAction(act); } } if(destType == 7){ //XYZ型 try (PtlActionGoTo act = new PtlActionGoTo(); // 設定するGoToアクション PtlDestXYZ dst = new PtlDestXYZ()) { // PDFの宛先 // 宛先ページの設定 // 最初に開くページを設定(ページ番号は0ベース) dst.setPageNumber(page); // 開く座標の設定 // leftの設定 dst.setLeft(left); // topの設定 dst.setTop(top); //dst.setTopNull(); // zoomの設定 dst.setZoom(zoom); //dst.setZoomNull(); // 宛先をGoToActionに設定 act.setDest(dst); openmode.setOpenAction(act); } } /*----- 開き方のデフォルト設定 -----*/ // ページモードの設定 PAGE_MODE_USE_THUMBS = 3 サムネイルパネルとページ openmode.setPageMode(PtlOpenMode.PAGE_MODE.PAGE_MODE_USE_THUMBS); // ページレイアウトの設定 PAGE_LAYOUT_ONE_COLUMN = 2 /* 連続ページ */ openmode.setPageLayout(PtlOpenMode.PAGE_LAYOUT.PAGE_LAYOUT_ONE_COLUMN); // ユーザーインターフェイスオプションを設定(論理和) // UI_OPTION_HIDE_WINDOWUI = 0x00000004 /* ウインドウコントロールを非表示 */ openmode.setUIOption(PtlOpenMode.UI_OPTION_HIDE_WINDOWUI); // ウインドウオプションを設定(論理和) // WINDOWS_OPTION_FIT_WINDOW = 0x00000001, /* ページにウィンドウサイズを合あわせる */ // WINDOWS_OPTION_CENTER_WINDOW = 0x00000002, /* ウィンドウを画面中央に配置 */ openmode.setWindowOption(PtlOpenMode.WINDOWS_OPTION_FIT_WINDOW |PtlOpenMode.WINDOWS_OPTION_CENTER_WINDOW); // ウィンドウのタイトルバーに文書タイトルを表示するかどうか設定 //(true: 非表示、false: 表示) openmode.setDisplayDocTitle(true); // 読み上げオプション設定 DIRECTION_R2L = 2 /* 右から左(中国語、日本語、韓国語のような縦書きも含む) */ docProperty.setDirection(PtlDocProperty.DIRECTION.DIRECTION_R2L); /*----- 以上、ここまでが開き方のデフォルト設定 -----*/ } // ファイルに保存します。 doc.save(outputFile); } ...【AppendAnnotStampDefault.javaと同じ処理のため省略 ・エラーメッセージ処理と出力】... } }
SetOpenAction.java
C:\samples>java cookbook.SetOpenAction usage: java SetOpenAction in-pdf-file out-pdf-file ページ表示の種類 開くページ [top left bottom right zoom] ページ表示の種類: 0 : Fit型 ページ全体がウィンドウに収まるように表示する 1 : FitB型 境界ボックス全体がウィンドウに収まるように表示する 2 : FitBH型 topを指定し、境界ボックスの幅がウィンドウに収まるように表示する 3 : FitBV型 leftを指定し、境界ボックスの高さがウィンドウに収まるように表示する 4 : FitH型 topを指定し、ページの幅がウィンドウに収まるように表示する 5 : FitR型 top, left, bottom, rightを指定し、指定した範囲がウィンドウに収まるように表示する 6 : FitV型 leftを指定し、ページの幅がウィンドウに収まるように表示する 7 : XYZ型 top, left, zoomを指定し、ウィンドウ左上が指定したページ座標になるようにして指定したzoom率で表示する ※ : top, left, bottom, right, zoomに関してはページ表示の種類によって不要な項目は読み飛ばされます。 例えば、FitV型を指定してleftの値だけを指定する場合はtopから順に"0 15"、XYZ型を指定してzoomの値を設定する場合はtopから順に "100 15 0 0 1.2"のように読み飛ばす部分に仮の値を挿入してください。) C:\samples>java cookbook.SetOpenAction thepdf4.pdf thepdf4-openact0.pdf 0 23 200 20 50 91 200 -- 完了 -- C:\samples>java cookbook.SetOpenAction thepdf4.pdf thepdf4-openact7.pdf 7 23 200 20 50 91 50 -- 完了 -- C:\samples>java cookbook.SetOpenAction thepdf4.pdf thepdf4-openact71.pdf 7 23 200 20 50 91 200 -- 完了 --
次図は左から、0:Fit型、7:XYZ型でズーム50%、7:XYZ型でズーム200%を設定したPDFを開いたところです。