
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を開いたところです。
