TOP > AFormAut > ExecuteThisJavascript メソッド
説明
開いているPDFに対してAcrobat JavaScript を実行します。
Acrobat JavaScript は文字列として指定します。
形式
CString ExecuteThisJavascript ( LPCTSTR bstrTheScript ) ;
引数
- 第一引数 (LPCTSTR bstrTheScript) :
文字列の Acrobat JavaScript スクリプト。
戻り値
- Acrobat JavaScript でイベントレベルに割り当てた結果を文字列として返す。
スクリプト 最後に"event.value= 99;" 等で記述すれば、結果を受け取れます。
詳細はサンプル参照。
動作するバージョン
Adobe Acrobat | 結果 | 備考 |
---|---|---|
4 | NO | Acrobat 4.0 ※Windows 98SE + Excel 2000 *1 ※古いPDFのバージョンはOK! |
5 | NO | Acrobat 5.0.5 + Excel 2003 *1 ※古いPDFのバージョンはOK |
6 | NO | Acrobat 6.0.6 Pro + Excel 2003 *1 ※古いPDFのバージョンはOK |
7 | OK | Acrobat 7.1.4 Pro + Excel 2003 *2 ※レジストリ操作で全面的に可能になる |
8 | NO | Acrobat 8.3.1 Pro + Excel 2003 ※当Acrobatバージョンでは全面的に不可 |
9 | NO | Acrobat 9.5.5 Extended + Excel 2003 ※当Acrobatバージョンでは全面的に不可 |
10 | OK | Acrobat X (10.1.8) Extended + Excel 2003 |
11 | OK | Acrobat 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ファイルを処理する。
- F8 キーでステップ実行しながら動作確認します。
- 事前に 参照設定(AFormAutの追加版) が必要です。
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編)
実行結果
サンプル②:Excel のVBA
説明 :
指定文字列(単語)をハイライトのテキストにする。
実行するAcrobat JavaScript は外部からテキストファイルで読み込む。
ハイライト処理したPDFは別名で最適化して保存する。
- F8 キーでステップ実行しながら動作確認します。
- 事前に 参照設定(AFormAutの追加版) が必要です。
Acrobat_JavaScript01.txt テキストファイルの内容
// 文書全体にわたって単語を検索し、その単語をハイライトにする
// 作成 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 'https://pdf-file.nnn2.com/?p=767
187 'から持ってくる。
188
189 End Function
190
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
実行結果
備考
- Acrobat JavaScript の機能が基本的に全て 使用できます。(のはずです。
- サンプル①もサンプル②もJSOjectオブジェクトを使っても出来ますが、
制約が少なく、高速処理が可能、また応用範囲も広いと考えています。 - 一般的に「テキストのハイライト」と表現しますが、Acrobat SDK では
「Highlight 注釈」、単に「ハイライト」と表現する場合があります。 - Acrobat JavaScript に関しては以下の日本語リファレンスを参照。
JavaScript for Acrobat API Reference
Adobe Acrobat SDK バージョン 8.0
(765頁) Acrobat JavaScript の詳細な解説書/リファレンス
Acrobat JavaScript メモ
- 戻り値は「イベントレベルに割り当てた結果を文字列と返す」 と書いていますが、
サンプルの様にスクリプトの最後に「"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
< 戻る >