AFormAut : ExecuteThisJavascript メソッド

TOP > AFormAut > ExecuteThisJavascript メソッド


説明

開いているPDFに対してAcrobat JavaScript を実行します。

Acrobat JavaScript は文字列として指定します。

形式

CString  ExecuteThisJavascript  ( LPCTSTR  bstrTheScript ) ;

引数

  1. 第一引数 (LPCTSTR bstrTheScript) :
    文字列の Acrobat JavaScript スクリプト。

戻り値

  • Acrobat JavaScript でイベントレベルに割り当てた結果を文字列として返す。 
    スクリプト 最後に"event.value= 99;" 等で記述すれば、結果を受け取れます。
    詳細はサンプル参照。

動作するバージョン

Adobe
Acrobat
結果備考
4NOAcrobat 4.0 ※Windows 98SE + Excel 2000 *1
※古いPDFのバージョンはOK!
5NOAcrobat 5.0.5 + Excel 2003 *1
※古いPDFのバージョンはOK
6NOAcrobat 6.0.6 Pro + Excel 2003 *1
※古いPDFのバージョンはOK
7OKAcrobat 7.1.4 Pro + Excel 2003 *2 
※レジストリ操作で全面的に可能になる
8NOAcrobat 8.3.1 Pro + Excel 2003
※当Acrobatバージョンでは全面的に不可
9NOAcrobat 9.5.5 Extended + Excel 2003
※当Acrobatバージョンでは全面的に不可
10OKAcrobat X (10.1.8) Extended + Excel 2003
11OKAcrobat XI (11.0.5) Extended + Excel 2003
  • OK : 正常処理する。
  • NO : 動作しない。 又は実行時にエラーになる。
  • *1 : 「PDF のバージョン」によっては正常処理出来ない場合がある。
  • *2 : 全ての「PDF のバージョン」での処理を可能にしたければ、
    処理前のレジストリに以下を追加する必要があります。
    [HKEY_CURRENT_USER¥Software¥Adobe¥Adobe Acrobat¥7.0¥AVAlert]
    [HKEY_CURRENT_USER¥Software¥Adobe¥Adobe Acrobat¥7.0¥AVAlert¥cCheckbox]
    "idocNewerVersionWarning"=dword:00000001

サンプル①:Excel のVBA

説明 :

Acrobat JavaScript でPDFドキュメントの総ページ数を取得する。

12ページあるPDFファイルを処理する。

001 Option Explicit 002 003 Sub ExecuteThisJavascript_test() 004 005 Dim strAcrobatJavaScript As String 006 Dim strReturn As String 007 Dim lRet As Long 008 009 Const CON_PDF_FILE = "D:\VBJavaScript.pdf" 010 011 '*----------------------------------------------------------- 012 '* PDFファイルを開く 013 014 'Acrobatオブジェクトの定義&作成 015 Dim objAcroApp As New Acrobat.AcroApp 016 Dim objAcroAVDoc As New Acrobat.AcroAVDoc 017 018 Dim objAFormApp As AFORMAUTLib.AFormApp 019 Dim objAFormFields As AFORMAUTLib.Fields 020 021 '※CreateObject("AFormAut.App")のエラー 022 '※[429 ActiveXコンポーネントはオブジェクトを作成できません。] 023 '※回避用 / メモリにAcrobatを強制ロードさせる 024 objAcroApp.CloseAllDocs 025 026 '処理対象のPDFファイルを開く 027 '※AVDocでOpenしないと"AFormAut.App"で実行エラー 028 lRet = objAcroAVDoc.Open(CON_PDF_FILE, "") 029 If lRet = 0 Then 030 MsgBox "AVDocオブジェクトはOpen出来ません" & vbCrLf & _ 031 CON_PDF_FILE, vbOKOnly + vbCritical, "処理エラー" 032 GoTo Skip_ExecuteThisJavascript_test: 033 End If 034 035 '*----------------------------------------------------------- 036 '* AFormオブジェクトの作成 037 038 Set objAFormApp = CreateObject("AFormAut.App") 039 Set objAFormFields = objAFormApp.Fields 040 041 '*----------------------------------------------------------- 042 '* PDFに対してAcrobat JavaScriptを実行 043 044 'Acrobat JavaScriptの作成 ※ドキュメントの頁数の取得 045 strAcrobatJavaScript = "var a = this.numPages;" & _ 046 "event.value = a;" 047 'Acrobat JavaScript の実行 048 strReturn = objAFormFields.ExecuteThisJavascript(strAcrobatJavaScript) 049 050 Skip_ExecuteThisJavascript_test: 051 052 '*----------------------------------------------------------- 053 '* 終了処理 054 055 '変更しないで閉じます 056 lRet = objAcroAVDoc.Close(1) 057 058 'Acrobatアプリケーションの終了 059 objAcroApp.Hide 060 objAcroApp.Exit 061 062 'オブジェクトの開放 063 Set objAFormFields = Nothing 064 Set objAFormApp = Nothing 065 Set objAcroAVDoc = Nothing 066 Set objAcroApp = Nothing 067 068 MsgBox "End Sub ドキュメントの頁数(" & strReturn & ")" 069 End Sub 070


 Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
 

実行結果

AFormAut : ExecuteThisJavascript メソッドの実行結果①

サンプル②:Excel のVBA

テキストをハイライトにする

説明 :

指定文字列(単語)をハイライトのテキストにする。

実行するAcrobat JavaScript は外部からテキストファイルで読み込む。

ハイライト処理したPDFは別名で最適化して保存する。

Acrobat_JavaScript01.txt テキストファイルの内容

Source file // 文書全体にわたって単語を検索し、その単語をハイライトにする // 作成 2013-11-11 作成者 pdf-file.nnn2.com var ckKey = "Acrobat"; // 検索キーワード var ntotal = 0; // 処理件数 for (var p = 0; p < this.numPages; p++) { var numWords = this.getPageNumWords(p); for (var i=0; i<numWords; i++) { var ckWord = this.getPageNthWord(p, i, true); if ( ckWord == ckKey) { /* then highlight it */ this.addAnnot({ page: p, strokeColor: color.yellow, type: "Highlight", quads: this.getPageNthWordQuads(p, i), }); ntotal++; } } } // 処理件数を返す event.value=ntotal;


 Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
 

Excel VBA

001 Option Explicit 002 003 Public Const PDSaveFull = &H1 004 Public Const PDSaveLinearized = &H4 005 Public Const PDSaveCollectGarbage = &H20 006 007 ' 実行するAcrobat JavaScript が入ったテキストファイル 008 Const CON_AJS_FILE = "D:\PDF\Acrobat_JavaScript01.txt" 009 ' ハイライト処理する元のPDFファイル名 010 Const CON_PDF_FILE = "D:\PDF\VBJavaScript.pdf" 011 ' 処理した後のPDFファイル名 012 Const CON_PDF_FILE_S = "D:\PDF\VBJavaScript-w.pdf" 013 014 Sub AddAnnot_Highlight_Main() 015 Debug.Print Time() 016 017 Dim strAcrobatPath As String '未使用 018 Dim strAcrobatVersion As String 'Acrobatバージョン 019 Dim strMsg As String 'エラーメッセージ 020 Dim strAcrobatJavaScript As String 'Acrobat JavaScript 021 Dim strReturn As String 'Acrobat JavaScriptの戻り値 022 Dim lRet As Long '処理結果 023 Dim bRet As Boolean '処理結果 024 025 '*----------------------------------------------------------- 026 '* 環境のAcrobatバージョンを事前チェックする 027 028 bRet = Get_Adobe_App_Info_nnn2( _ 029 "Acrobat", _ 030 strAcrobatPath, _ 031 strAcrobatVersion, _ 032 strMsg) 033 If bRet = False Then 034 MsgBox "01:Acrobat バージョンの取得 エラー " & vbCrLf & strMsg, _ 035 vbOKOnly + vbCritical + vbApplicationModal, "エラー" 036 Exit Sub 037 End If 038 If Not (CInt(strAcrobatVersion) = 7 Or _ 039 CInt(strAcrobatVersion) >= 10) Then 040 MsgBox "02:このAcrobatバージョン(" & strAcrobatVersion & _ 041 ")では処理出来ません。" & vbCrLf & _ 042 "Acrobat 7 , X(10) , XI(11) が必要です。", _ 043 vbOKOnly + vbCritical + vbApplicationModal, "エラー" 044 045 Exit Sub 046 End If 047 048 '*----------------------------------------------------------- 049 '* Acrobat JavaScriptスクリプトをテキストで読み込む 050 051 bRet = AddAnnot_Hl_AJSRead(strAcrobatJavaScript) 052 If bRet = False Or strAcrobatJavaScript = "" Then 053 MsgBox "03: ファイル読み込み時にエラー発生" _ 054 & vbCrLf & CON_AJS_FILE, _ 055 vbOKOnly + vbCritical + vbApplicationModal, "エラー" 056 Exit Sub 057 End If 058 059 '*----------------------------------------------------------- 060 '* PDFファイルを開く 061 062 'Acrobatオブジェクトの定義&作成 063 Dim objAcroApp As New Acrobat.AcroApp 064 Dim objAcroAVDoc As New Acrobat.AcroAVDoc 065 Dim objAcroPDDoc As New Acrobat.AcroPDDoc 066 067 Dim objAFormApp As AFORMAUTLib.AFormApp 068 Dim objAFormFields As AFORMAUTLib.Fields 069 070 '※CreateObject("AFormAut.App")のエラー 071 '※[429 ActiveXコンポーネントはオブジェクトを作成できません。] 072 '※回避用 / メモリにAcrobatを強制ロードさせる 073 objAcroApp.CloseAllDocs 074 '※高速処理をする為に画面を隠す 075 objAcroApp.Hide 076 077 '処理対象のPDFファイルを開く 078 '※AVDocでOpenしないと"AFormAut.App"で実行エラー 079 lRet = objAcroAVDoc.Open(CON_PDF_FILE, "") 080 If lRet = 0 Then 081 MsgBox "04: AVDocオブジェクトはOpen出来ません" & vbCrLf & _ 082 CON_PDF_FILE, vbOKOnly + vbCritical, "処理エラー" 083 GoTo Skip_AddAnnot_Highlight_Main: 084 End If 085 086 '*----------------------------------------------------------- 087 '* AFormオブジェクトの作成 088 089 Set objAFormApp = CreateObject("AFormAut.App") 090 Set objAFormFields = objAFormApp.Fields 091 092 '*----------------------------------------------------------- 093 '* PDFに対してAcrobat JavaScriptを実行 094 095 '検索キーワードの変更 096 ' strAcrobatJavaScript = Replace$( _ 097 ' strAcrobatJavaScript, "Acrobat", "Adobe") 098 'Acrobat JavaScript の実行 099 strReturn = objAFormFields.ExecuteThisJavascript(strAcrobatJavaScript) 100 ' Debug.Print "strReturn=" & strReturn 101 102 '*----------------------------------------------------------- 103 '* PDFを最適化して別名保存する 104 105 'PDFファイルを別名で保存 106 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc 107 lRet = objAcroPDDoc.Save( _ 108 PDSaveFull + PDSaveCollectGarbage + PDSaveLinearized, _ 109 CON_PDF_FILE_S) 110 If lRet = 0 Then 111 MsgBox "05: PDFファイルへ保存出来ませんでした" & vbCrLf & _ 112 CON_PDF_FILE_S, vbOKOnly & vbCritical, "エラー" 113 GoTo Skip_AddAnnot_Highlight_Main: 114 End If 115 116 Skip_AddAnnot_Highlight_Main: 117 118 '*----------------------------------------------------------- 119 '* 終了処理 120 121 '変更しないで閉じます 122 lRet = objAcroPDDoc.Close 123 '変更しないで閉じます 124 lRet = objAcroAVDoc.Close(1) 125 126 'Acrobatアプリケーションの終了 127 objAcroApp.Hide 128 objAcroApp.Exit 129 130 'オブジェクトの開放 131 Set objAFormFields = Nothing 132 Set objAFormApp = Nothing 133 Set objAcroPDDoc = Nothing 134 Set objAcroAVDoc = Nothing 135 Set objAcroApp = Nothing 136 137 Debug.Print Time() 138 MsgBox "End Sub (" & strReturn & ")" 139 End Sub 140 141 '************************************************** 142 ' 143 ' Acrobat JavaScript を別ファイルから読み込む 144 ' 145 146 Private Function AddAnnot_Hl_AJSRead( _ 147 ByRef strAJS As String) As Boolean 148 149 On Error GoTo Err_AddAnnot_Hl_AJSRead: 150 151 Dim lFileNO As Long 152 Dim strInputData As String 153 Dim lCnt As Long 154 155 lFileNO = FreeFile 156 Open CON_AJS_FILE For Input As #lFileNO 157 158 strAJS = "" 159 lCnt = 0 160 161 Do Until EOF(lFileNO) 162 Line Input #lFileNO, strInputData 163 strAJS = strAJS & strInputData & vbCrLf 164 lCnt = lCnt + 1 165 Loop 166 167 Close #lFileNO 168 AddAnnot_Hl_AJSRead = True 169 ' Debug.Print "Input Text =" & lCnt 170 Exit Function 171 172 Err_AddAnnot_Hl_AJSRead: 173 AddAnnot_Hl_AJSRead = False 174 End Function 175 176 '************************************************** 177 ' 178 Public Function Get_Adobe_App_Info_nnn2( _ 179 ByVal strApp As String, _ 180 ByRef strPath As String, _ 181 ByRef strVersion As String, _ 182 ByRef strMsg As String) As Boolean 183 184 '※当ロジックは 185 '関数:Acrobat , Adobe Reader のインストールパスとバージョンを取得 186 'http://pdf-file.nnn2.com/?p=767 187 'から持ってくる。 188 189 End Function 190


 Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
 

実行結果

AFormAut : ExecuteThisJavascript メソッドの実行結果②

備考

  1. Acrobat JavaScript の機能が基本的に全て 使用できます。(のはずです。
  2. サンプル①もサンプル②もJSOjectオブジェクトを使っても出来ますが、
    制約が少なく、高速処理が可能、また応用範囲も広いと考えています。
  3. 一般的に「テキストのハイライト」と表現しますが、Acrobat SDK では
    「Highlight 注釈」、単に「ハイライト」と表現する場合があります。
  4. Acrobat JavaScript に関しては以下の日本語リファレンスを参照。
    JavaScript for Acrobat API Reference
    Adobe Acrobat SDK バージョン 8.0

    (765頁) Acrobat JavaScript の詳細な解説書/リファレンス

Acrobat JavaScript メモ

  1. 戻り値は「イベントレベルに割り当てた結果を文字列と返す」 と書いていますが、
    サンプルの様にスクリプトの最後に「"event.value = a;"」 という感じで書けば
    文字列として戻り値が受け取れます。

動作確認の環境

  • Acrobat 4.0 + Office 2000
    +  Windows98SE( + WindowsUpdate)
  • Acrobat 5.0.5 + Office 2003( + SP3)
    +  WindowsXP Pro( + SP3 + WindowsUpdate)
  • Acrobat 6.0.6 Pro + Office 2003( + SP3)
    +  WindowsXP Pro( + SP3 + WindowsUpdate)
  • Acrobat 7.1.4 Pro + Office 2003( + SP3)
    +  WindowsXP Pro( + SP2 + WindowsUpdate)
  • Acrobat 8.3.1 Pro + Office 2003( + SP3)
    +  WindowsXP Pro( + SP3 + WindowsUpdate)
  • Acrobat 9.5.5 Extended + Office 2003( + SP3)
    +  WindowsXP Pro( + SP3 + WindowsUpdate)
  • Acrobat X (10.1.8) Extended + Office 2003( + SP3) 
    + WindowsXP Pro( + SP3 + WindowsUpdate)
  • Acrobat XI (11.0.5) Extended + Office 2003( + SP3)
    + WindowsXP Pro( + SP3 + WindowsUpdate)

Adobe Web 解説 URL(英語)

  • http://livedocs.adobe.com/acrobat_sdk/10/Acrobat10_HTMLHelp/wwhelp/wwhimpl/js/html/wwhelp.htm?href=IAC_API_FormsIntro.107.43.html&accessible=true
     
  • http://partners.adobe.com/public/developer/en/acrobat/sdk/FormsAPIReference.pdf#nameddest=G14.1031319

戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


★ 文章での質問は難しいですよネ。でも、早く解決して、家に帰りたい。


SAMURAI Plugin

コメントをする時は出来れば以下もお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れる時はコードを全て全角文字列にしてください。コチラで半角に戻します。それでもエラーが回避できない時はコメント下さい。個別に対処します。



お仕事で当サイトを見ている方へ
考え込んだら、ご質問下さい。
一緒に解決策を考えましょう。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください