LoginSignup
4
2

VBAからAdobe Acrobatを制御してPDFファイルにタイムスタンプを付与する

Last updated at Posted at 2024-03-28

はじめに

前回の記事では、VBAからAdobe Acrobatを制御してPDFファイルをデジタル署名する方法を紹介しました。

今回は、VBAからAdobe Acrobatを制御してPDFファイルにタイムスタンプを付与する方法を整理しました。

環境

・Windows 10 Pro
・Microsoft 365 (Excel)
・Adobe Acrobat Pro

タイムスタンプ付与方法

事前設定

  1. タイムスタンプ付与するためには、事前にAcrobatでデフォルトのタイムスタンプサーバーを設定する必要があります。
    設定方法については、下記の「Acrobatタイムスタンプサーバー設定方法」を参照してください。

  2. Acrobatを起動して「メニュ」の「編集」→「環境設定」→分類で「セキュリティ(拡張)」を選択後、「サンドボックスによる保護」の「起動時に保護モードを有効にする」のチェックを外す必要があります。
    image.png

処理の流れ

  1. PDFファイルを開く
  2. JSObjectを呼び出す
  3. PDFファイルにタイムスタンプ付与してファイルを出力する
  4. PDFファイルを閉じる

コードの例

Public Sub CreateTimestampedPdfFile111()
    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タイムスタンプサーバー設定方法

  1. Acrobatを起動して「メニュ」の「編集」→「環境設定」を開きます。
    image.png

  2. 分類で「署名」を選択して、「文書のタイムスタンプ」の「詳細」ボタンを押します。
    image.png

  3. タイムスタンプサーバー設定で、新規のタイムスタンプサーバーを追加します。
    image.png

  4. 新規追加するタイムスタンプサーバーの名前と、サーバー設定を入力します。
    下の例で使ったSSL.comタイムスタンプサーバーは、無償で使えるタイムスタンプサーバーです。

名前:SSL.com
サーバーのURL:http://ts.ssl.com

image.png

  1. 追加したタイムスタンプサーバーを選択し、「デフォルトに設定」ボタンを押して、デフォルトサーバーに設定します。
    image.png

参考

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2