さて、InDesignのネタが尽きはじめているので(笑)、Acrobatのjavascriptのいろいろ。

っていっても、リファレンスそのものもあるかもです…。

これまた、動作しないとかあるかも知れません。(たぶん、バージョンは6あたりで開発していた…と思う)

Acrobatのjavascriptは情報が少なくて、苦労した覚えがあります。


そもそも、Acrobatのjavascriptを作ったきっかけは、お客様のクレームにより、大量のPDFを作り直さなきゃいけなくって、10人以上の体制で金~日ぐらいを費やしました。

「プログラムで何とかしよう」チームと「とにかく手作業で前へ進もう」チームの二手に分かれ、その時にいろいろと探った結果が下記のソースです。

結局、プログラムで何とかなった部分は少なく、貫徹(かんてつって、完全徹夜?)となったのですが…。

(徹夜あけの真昼間のビールはウマかった! ただし、日曜日のお昼なんで周りの人から見たら異常だったかも…?)


※下記のプログラムを使用して問題があっても責任は負えません…。

 単なるメモ程度と思って頂けるとありがたいです。


//--ページ関連---------------------------
//●ページ表示
//1ページ目を表示します。
//0から始まりますので、ソースの例では2ページ目を表示します。
this.pageNum = 1;


//●表示しているページ番号を表示
app.alert(this.pageNum);


//●ドキュメントのページ数を取得する
app.alert(this.numPages);


//●ページを置換する
//「nStart およびnEnd を指定しない場合、ドキュメントの全ページが対象になります。
//nStartのみを指定した場合は、nStart に指定したページのみが対象になり、nEnd の
//みを指定した場合は、0 からnEnd までが対象になります。」とリファレンスには書
//かれていますが、うまく動作しません。
//※nStartに差し替えるページを指定するとちゃんと動作しました。
srpFilePath = "C:/pdf/replace.asp"
this.replacePages ( 0, srpFilePath, 0);


//●全ページを置換する(バッチ処理)
//別フォルダにある同じ名前のPDFで全ページを差し替えます。
//1.シーケンスを作成
//2.JavaScriptを登録
//3.バッチシーケンスを編集ダイアログでバッチ処理を設定
//4.バッチシーケンスダイアログで作成したシーケンスを選択し、[シーケンスを実行]
//  ボタンをクリック
srpFoldPath = "C:/replacepdf/"
for (i = 0; i < this.numPages; i++){
this.replacePages ( i, srpFoldPath + this.documentFileName, i);
}


//--フィールド関連------------------------
//●文書内全てのフィールドを削除
total = this.numFields;
for (i=total-1; i>=0; i--)
{
  fName = this.getNthFieldName(i);
  this.removeField(fName);
}


//●文書内全てのフィールド名取得
//文書内全てのフィールド名を取得します。ただし、同一の名前は取得出来ません。
total = this.numFields;
for (i=0; i<total; i++)
{
fName = this.getNthFieldName(i);
app.alert(i+"番目の名前:"+fName);
}


//●値の設定
this.getField("名前").value = "あいうえお";


//●文書内全てのフィールド名とそのフィールドが存在するページ番号を取得
//バッチを実行する前に必ずメニューの[アドバンスト]-[JavaScript]-[デバッガ]
//よりコンソールを開いておく必要があります
//ファイル名:フィールド名:No(同じフィールド名内の連番):
//ページ番号(1ページ目から)
total = this.numFields;
for (i=0; i<total; i++){
fName = this.getNthFieldName(i);
var f = this.getField(fName);
if (typeof f.page == "number"){
ipage = f.page + 1;
console.println(this.documentFileName + ":" + fName + ":" + "1:" + ipage);
}
else{
for( n = 0; n<f.page.length; n++ ){
ipage = f.page[n] + 1;
icnt = n + 1;
console.println(this.documentFileName + ":" + fName + ":" + icnt + ":" + ipage );
}
}
}


//●ボタンを追加する
//ページの左下からx=50ポイント、y=ポイントの場所に、幅=50ポイント、
//高さ=20ポイントの位置にボタンを作成します。

x1 = 50;
y1 = 50;
objFbtn = this.addField("myBtn", "button", 0, [x1, y1, x1+50, y1-20]);


//●ボタンフィールドのスタイル設定
//ボタンを追加
x1 = 50;
y1 = 50;
objFbtn = this.addField("myBtn","button",0,[x1,y1,x1+50,y1-20]);

//(1)フィールドの境界線スタイルを設定
//solid:border.s → 矩形の周囲を実線で描きます
//beveled:border.b → 周囲を破線で描きます
//dashed:border.d → 実線の内側に斜影(浮き出た外観、ベベル)が加えられます
//inset:border.i → 実線の内側に切り込み(くぼんだ外観)が加えられます
//underline:border.u → 矩形の底辺(下線)を描きます
objFbtn.borderStyle = border.b;

//(2)フィールドを囲む矩形の境界線の太さを設定
//なし:0
//細い:1
//標準:2
//太い:3
objFbtn.lineWidth = 1;

//(3)背景色を設定
objFbtn.fillColor = color.blue;

//(4)フィールド表示設定を設定
//display.visible → 画面および印刷でフィールドを表示する
//display.hidden → 画面および印刷でフィールドを非表示にする
//display.noPrint → 画面ではフィールドを表示するが、印刷はしない
//display.noView → 画面ではフィールドを非表示にするが、印刷はする
objFbtn.display = display.noPrint;

//(5)ボタンをクリックしたときのボタンの状態
//none:highlight.n → ボタンをクリックしても視覚的な変化はありません
//invert:highlight.i → ボタンを囲む矩形領域が一時的に反転します
//push:highlight.p → ボタン上のアイコンまたはテキスト(存在する場合)が一時的に下に押されて表示されます
//outline:highlight.o → ボタンを囲む境界線が一時的に反転します
objFbtn.highlight = highlight.p;

//(6)ボタンのキャプションを追加
objFbtn.buttonSetCaption("Hello");


//--しおり関連--------------------------

//●ドキュメント内の全しおりを取得
function DumpBookmark(bm, nLevel){
var s = "";
for (var i = 0; i < nLevel; i++){
   s += " ";
}
  console.println(s + "+-" + bm.name);
  if (bm.children != null){
for (var i = 0; i < bm.children.length; i++){
DumpBookmark(bm.children[i], nLevel + 1);
   }
}
}
console.show();
console.clear();
console.println(this.documentFileName + "-------------------------------------------------");
DumpBookmark(this.bookmarkRoot, 0);


//●ドキュメント内のしおり数を取得
//バッチを実行する前に必ずメニューの[アドバンスト]-[JavaScript]-[デバッガ]
//よりコンソールを開いておく必要があります
function DumpBookmark(bm, nLevel){
var s = "";
for (var i = 0; i < nLevel; i++){
   s += " ";
}
iCnt++;
  if (bm.children != null){
for (var i = 0; i < bm.children.length; i++){
DumpBookmark(bm.children[i], nLevel + 1);
   }
}
}
console.show();
var iCnt = 0;
DumpBookmark(this.bookmarkRoot, 0);
console.println(this.documentFileName + ":" + iCnt);


//--コンソール関連------------------------
//●コンソールウィンドウを開く
console.show();


//●コンソールウィンドウを閉じる
console.hide();


//●コンソールウィンドウに文字を表示
console.show();
console.println("amiza_ret");