はじめに
前回の記事では、VBAからAdobe Acrobatを制御してPDFファイルをデジタル署名する方法を紹介しました。
今回は、VBAからAdobe Acrobatを制御してPDFファイルにタイムスタンプを付与する方法を整理しました。
環境
・Windows 10 Pro
・Microsoft 365 (Excel)
・Adobe Acrobat Pro
タイムスタンプ付与方法
事前設定
-
タイムスタンプ付与するためには、事前にAcrobatでデフォルトのタイムスタンプサーバーを設定する必要があります。
設定方法については、下記の「Acrobatタイムスタンプサーバー設定方法」を参照してください。 -
Acrobatを起動して「メニュ」の「編集」→「環境設定」→分類で「セキュリティ(拡張)」を選択後、「サンドボックスによる保護」の「起動時に保護モードを有効にする」のチェックを外す必要があります。
処理の流れ
- PDFファイルを開く
- JSObjectを呼び出す
- PDFファイルにタイムスタンプ付与してファイルを出力する
- PDFファイルを閉じる
コードの例
Public Sub CreateTimestampedPdfFile()
Dim acroPdObj As New Acrobat.AcroPDDoc
Dim acroAvObj As New Acrobat.AcroAVDoc
Dim jsObj As Object
Dim objSign As Object
Dim srcFilePath As String
Dim dstFilePath As String
srcFilePath = "C:\TimestampTest\Input\InputPdfFile.pdf"
dstFilePath = "C:\TimestampTest\Output\OutputPdfFile.pdf"
' PDFファイルを開く
If acroPdObj.Open(srcFilePath) Then
Set acroAvObj = acroPdObj.OpenAVDoc(srcFilePath)
' JSObjectを定義する
Set jsObj = acroPdObj.GetJSObject
' SecurityHandlerを生成
' https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#gethandler
Set objSign = jsObj.security.getHandler("Adobe.PPKLite")
' タイムスタンプ付与
' 参照先:https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/doc.html#timestampsign
' 事前にAcrobatでデフォルトのタイムスタンプサーバーを設定する必要がある
Call jsObj.timestampSign(objSign, dstFilePath)
Call acroAvObj.Close(1)
Call acroPdObj.Close
End If
Set acroPdObj = Nothing
Set jsObj = Nothing
Set objSign = Nothing
End Sub
コード例の説明
Dim acroPdObj As New Acrobat.AcroPDDoc
Dim acroAvObj As New Acrobat.AcroAVDoc
...
' PDFファイルを開く
If acroPdObj.Open(srcFilePath) Then
Set acroAvObj = acroPdObj.OpenAVDoc(srcFilePath)
PDFファイルを開きます。
' JSObjectを定義する
Set jsObj = acroPdObj.GetJSObject
JSObjectを取得します。
JSObjectは、Acrobat.AcroPDDocから取得できます。
' SecurityHandlerを生成
' https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#gethandler
Set objSign = jsObj.security.getHandler("Adobe.PPKLite")
' タイムスタンプ付与
' 参照先:https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/doc.html#timestampsign
' 事前にAcrobatでデフォルトのタイムスタンプサーバーを設定する必要がある
Call jsObj.timestampSign(objSign, dstFilePath)
SecurityHandlerを生成します。
Handlerは、例の「Adobe.PPKLite」以外にも、下記のURLの方法で使用できるものを確認することができます。
その後、タイムスタンプを付与して、ファイルを出力します。
Acrobatでデフォルトのタイムスタンプサーバーの設定をしなかった場合、正しく動作しません。
Call acroAvObj.Close(1)
Call acroPdObj.Close
End If
PDFファイルを閉じます。
Acrobatタイムスタンプサーバー設定方法
-
新規追加するタイムスタンプサーバーの名前と、サーバー設定を入力します。
下の例で使ったSSL.comタイムスタンプサーバーは、無償で使えるタイムスタンプサーバーです。
名前:SSL.com
サーバーのURL:http://ts.ssl.com
参考