水の記録 |
|---|
| 「写真は記録である」ことを追求し、日々の記録をしています。 |
Profile
by bourne
NewEntriesRecentCommentsRecentTrackbackaffiliate |
InDesign JavaScriptでのwait2008年07月08日(火)09:51
仕事でやっているDTP関連のプログラミングのことを少し。
InDesignCS2でJavaScriptを使ってマルチページのPDFファイルのページ数を取得するため、JavaScriptからPDFのページ数を取得するためのVBScriptを書き出し、scriptArgsメソッドを使って取得したページ数を受け渡ししています。 このとき、書き出したVBScriptをexcute()で実行し、すぐにscriptArgs.getしても値が取れません。 これは、excute()メソッドは実行(起動)できたかどうかのみをチェックしているため、VBScriptの処理が完了するのを待たずに、処理を継続しているためと思われます。 そこで、JavaScriptの方で一定時間処理を中断させることでVBScriptの処理を優先させたいのですが、InDesignのJavaScriptにはsetIntervalが実装されていないようです。ほかに処理を中断させる方法はないかとググってみたところ、$.sleep()というメソッドが見つかったのですが、試してみると確かに処理は中断するのですが、その間もJavaScriptはビジー状態で、バックグラウンドのVBScriptの処理が進んでくれません。 ほかに何か処理を中断させる方法はないかと思案していたのですが、ふと、「alert()関数は処理を中断するなぁ」と思い、試してみました。 書き出すVBScriptに以下の処理を記述します。 Set wshshell = WScript.CreateObject("WScript.Shell") Do While wshshell.AppActivate("Script Alert") wshshell.sendkeys("{ENTER}") WScript.Sleep 100 Loop VBScriptをexcute() で実行し、すぐに alert("please wait"); などのalertを出します。 このalertは"Script Alert"というタイトルのダイアログとなるので、 VBScriptでは"Script Alert"というタイトルのダイアログがなくなるまでループし、ダイアログに"{ENTER}"を送信し続け、ダイアログを終了します。これによって、JavaScriptの処理が再開されます。 私のググり方が悪いのか、ほかにいい方法が見つけれなかったので、ほかの方法をご存知の方がおられればお教えいただければなぁ、と思います。というか、教えてください。 ちなみにPDFのページ数を取得するVBS Set objAcroPDDoc = CreateObject("AcroExch.PDDoc") objAcroPDDoc.Open("c:/hoge.pdf") Dim myReturn myReturn = CStr(objAcroPDDoc.GetNumPages()) |
Calender
CategoriesArchives
Links |
無料ホームページ アフィリエイト レンタルサーバー 1GB!FC2ブログ 冠婚葬祭
Powered By FC2. Designed By Seedleaf.