xlogI125’s blog

パソコン作業を効率化したい

Acrobat Standard で JavaScript デバッガー を開く

プロパティのアクション

バージョンは Acrobat Standard DC (2022年2月頃)、Windows 11。

  • JavaScriptを実行」で console.show(); を実行する
    • しおりのプロパティ の アクション で JavaScriptを実行
    • ページのプロパティ の アクション で JavaScriptを実行

IAC

  • とりあえず動作することだけを確認したいのでエラー処理や終了方法は考慮しない
    • AcroPDDoc.Close(), AcroAVDoc.Close(true), AcroApp.CloseAllDocs(), AcroApp.Hide(), AcroApp.Exit() など

VBA

  • AcrobatのタブにPDF文書が表示されている状態で実行する
  • エラー処理は気にしない
' Excel 2019, Windows 11, Acrobat Standard DC (2022年3月頃)

' 参照設定
' Acrobat (Adobe Acrobat 10.0 Type Library)

Option Explicit

Public Sub JsoConsoleShow()

#Const DebugVersion = False

#If DebugVersion Then
  Dim avApp As Acrobat.AcroApp
  Dim avDoc As Acrobat.AcroAVDoc
  Dim pdDoc As Acrobat.AcroPDDoc
#Else
  Dim avApp As Object
  Dim avDoc As Object
  Dim pdDoc As Object
#End If

  Dim jso As Object

  Set avApp = VBA.Interaction.CreateObject("AcroExch.App")
  Set avDoc = avApp.GetActiveDoc()

  If avDoc Is Nothing Then
    Set avApp = Nothing
    Debug.Print "タブに文書が表示されている状態で実行してください"
    Exit Sub
  End If

  Set pdDoc = avDoc.GetPDDoc()

  pdDoc.OpenAVDoc("").BringToFront

  Set jso = pdDoc.GetJSObject()
  jso.console.Show
  jso.console.println "// 実行方法はテキストを範囲選択して Ctrl + Enter"

  Set jso = Nothing
  Set pdDoc = Nothing
  Set avDoc = Nothing
  Set avApp = Nothing

End Sub

PowerShell

  • このスクリプトを実行するとAcrobatがバックグラウンド プロセスに残る
  • PowerShellのコンソールに貼り付けて実行
  • エラー処理やCOMオブジェクトの解放を気にしてないので練習以外で実行しない
# PowerShell 5.1, Windows 11, Acrobat Standard DC (2022年3月頃)

## このスクリプトのファイル名
##  "%USERPROFILE%\Desktop\JsoConsole.ps1"
## エンコード
##  UTF-8 (BOM付き)

## ショートカット(.lnk)
##  リンク先(T):
##   PowerShell.exe -NoLogo -NoExit -ExecutionPolicy RemoteSigned -File "%USERPROFILE%\Desktop\JsoConsole.ps1"
##  作業フォルダー(S):
##   ""

Set-StrictMode -Version Latest

$gPDDoc = New-Object -ComObject "AcroExch.PDDoc"
# $gPDDoc = [System.Activator]::CreateInstance([Type]::GetTypeFromProgID("AcroExch.PDDoc"))

# PDFファイルのパス
$filePath = "${env:USERPROFILE}\Desktop\白紙.pdf"
## $filePath = $args[0]

Write-Host $filePath

$null = $gPDDoc.Open($filePath)
$null = $gPDDoc.OpenAVDoc("").BringToFront()

$jso = $gPDDoc.GetJSObject()

$jsoConsole = [Type]::GetType($jso).InvokeMember(
  "console", 
  [System.Reflection.BindingFlags]::GetProperty, $null, $jso, 
  $null
)

[Type]::GetType($jsoConsole).InvokeMember(
  "show", 
  [System.Reflection.BindingFlags]::InvokeMethod, $null, $jsoConsole, 
  $null
)

$null = [Type]::GetType($jsoConsole).InvokeMember(
  "println", 
  [System.Reflection.BindingFlags]::InvokeMethod, $null, $jsoConsole, 
  @("// 実行方法はテキストを範囲選択して Ctrl + Enter")
)

$jsoConsole = $null
$jso = $null
$gPDDoc = $null

[System.GC]::Collect()

%APPDATA%にあるフォルダに保存

バージョンは Acrobat Standard DC (2022年4月頃)、Windows 11。

  • フォルダ
    • %USERPROFILE%\AppData\Roaming\Adobe\Acrobat\Privileged\DC\JavaScripts
  • ファイル名
    • *.js (console_show.jsなど)
// Acrobat Standard DC (2022年4月頃), Windows 11

// メニューのヘルプの下に追加
app.addMenuItem({
  cName: "MyNameConsoleShow", 
  cUser: "console.show()", 
  cParent: "Help", 
  nPos: 0, 
  cExec: "console.show();", 
  cEnable: "true", 
  cMarked: "", 
  bPrepend: true
});