はじめに
AcrobatのGUIから画像を追加する作業は簡単でしたが、スクリプトで画像を追加することは、それほど簡単ではありませんでした。
レファレンスを調査して見ても、明確に画像を追加する関数を発見できず、方法を調べてみても想定した結果とはことなる場合がほとんどでした。
しかし、ファイルからPDFファイルにウォーターマーク(透かし)を追加する関数を活用して画像を追加ができました。
今回は、VBAからAdobe Acrobatを制御してPDFファイルに画像を追加する方法を整理しようと思います。
環境
・Windows 10 Pro
・Microsoft 365 (Excel)
・Adobe Acrobat Pro
画像追加方法
事前設定
PDFファイルを修正後、保存するためには、事前にAcrobatを起動して「メニュ」の「編集」→「環境設定」→分類で「セキュリティ(拡張)」を選択後、「サンドボックスによる保護」の「起動時に保護モードを有効にする」のチェックを外す必要があります。
画像追加機能の関数について
JSObjectから使用できる「addWatermarkFromFile」という関数があり、ファイル(PDFや画像ファイルなど)からPDFファイルにウォーターマーク (透かし)を追加する機能を持つ関数であります。
ウォーターマークを追加するための関数ですが、この関数を活用して普通に画像を追加することもできました。
以下のURLでも「addWatermarkFromFile」関数について、詳細の確認ができます。(英語)
関数の引数構成
addWatermarkFromFile(cDIPath, nSourcePage, nStart, nEnd, bOnTop, bOnScreen, bOnPrint, nHorizAlign, nVertAlign, nHorizValue, nVertValue, bPercentage, nScale, bFixedPrint, nRotation, nOpacity)
cDIPathは必須、他の引数は任意です。
VBAからaddWatermarkFromFileを呼び出す時、
前者の引数を指定し後者の引数を省略することはできますが
(例えば、nStartは指定、nEndは省略)、
前者の引数を省略し後者の引数を指定することはできません。
(例えば、nStartは省略、nEndは指定)
cDIPath
画像ファイルのパスです。
指定したファイルがPDFファイルではない場合(JPG、PNGなど)、Acrobatから画像ファイルをPDFファイルに変換して追加します。
nSourcePage
画像ファイルのどのページを使うかを指定します。
インデックスは0から始まります。
デフォルトは 0 です。
-
例
nSourcePage = 0 の場合
PDFファイルの1ページ目が画像として、入力PDFファイルに追加されます。
※ 画像ファイルがPDFファイルではなく、画像ファイル(JPG、PNGなど)の場合、nSourcePage = 0で良いです。
nStart, nEnd
入力PDFファイルの何ページから何ページまで画像を追加するか指定します。
nStartとnEndが同じの場合、指定したページのみに画像を追加します。
-
例1
nStart = 1、nEnd = 3 の場合
入力PDFファイルの2ページから4ページまで画像を追加します。 -
例2
nStart = 0、nEnd = 0 の場合
入力PDFファイルの1ページのみ画像を追加します。
bOnTop
追加する画像のz-orderを指定します。
Trueの場合、すべてのコンテンツの上に画像が追加されます。
Falseの場合、すべてのコンテンツの下に画像が追加されます。
デフォルトは True です。
bOnScreen
画面で文書を見る時、画像を表示するかどうかを指定します。
デフォルトは True です。
bOnPrint
文書を印刷する時、画像を表示するかどうかを指定します。
デフォルトは True です。
nHorizAlign, nVertAlign
nHorizAlignは、画像を水平方向にどのように配置するかを指定します。
デフォルトは 1 (中央) です。
nVertAlignは、画像を垂直方向にどのように配置するかを指定します。
デフォルトは 1 (中央) です。
入力できる値は以下のようになります。
値 | 説明 | 使える引数 |
---|---|---|
0 | 左に配置 | nHorizAlign |
1 | 中央に配置 | nHorizAlign nVertAlign |
2 | 右に配置 | nHorizAlign |
3 | 上に配置 | nVertAlign |
4 | 下に配置 | nVertAlign |
nHorizValue, nVertValue, bPercentage
nHorizValueは、画像を水平位置を移動するために使用される数値です。
デフォルトは 0 です。
nHorizValue > 0 の場合、画像が右に移動します。
nHorizValue < 0 の場合、画像が左に移動します。
nVertValueは、画像を垂直位置を移動するために使用される数値です。
デフォルトは 0 です。
nVertValue > 0 の場合、画像が上に移動します。
nVertValue < 0 の場合、画像が下に移動します。
bPercentageは、nHorizValueとnVertValueの数値をページサイズの割合にするか、明示的なポイント数にするかを指定します。
デフォルトは False です。
nScale
画像のスケールです。
デフォルトは 1.0 (100%) です。
※ nScale = -1 の場合、ページサイズに合わせて画像のスケールを調整します。
bFixedPrint
画像をFixedPrintウォーターマーク注釈として追加を指定します。
Trueの場合、印刷されるページのサイズに関係なく、固定のサイズ/位置に画像の印刷されます。
また、bOnTopの指定は無視されます。
デフォルトは False です。
nRotation
画像を反時計回りに回転します。
デフォルトは 0 です。
nOpacity
画像の不透明度を指定します。
0 は透明、1.0 は不透明です。
デフォルトは 1.0 です。
コードの例
Public Sub InsertImageInPdf()
Dim acroPdObj As New Acrobat.AcroPDDoc
Dim jsObj As Object
Dim inputFilePath As String
Dim paramObj As Dictionary
Dim srcFilePath As String
Dim dstFilePath As String
Dim imageFilePath As String
srcFilePath = "C:\AddImage\Input\InputPdfFile.pdf"
dstFilePath = "C:\AddImage\Output\OutputPdfFile.pdf"
imageFilePath = "C:\AddImage\Image\TargetImage.png"
If acroPdObj.Open(srcFilePath) Then
Set jsObj = acroPdObj.GetJSObject
' PDFファイルに画像を追加する
' 参照先:https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/doc.html#addwatermarkfromfile
' addWatermarkFromFile(cDIPath, nSourcePage, nStart, nEnd, bOnTop, bOnScreen, bOnPrint, nHorizAlign, nVertAlign, nHorizValue, nVertValue, bPercentage, nScale, bFixedPrint, nRotation, nOpacity)
Call jsObj.addWatermarkFromFile(imageFilePath, 0, 0, 5, True, True, True, 0, 3, 100, -100, False, 0.5, False, 0, 0.7)
' PDFファイルを保存
Call acroPdObj.Save(1, dstFilePath)
' PDFファイルを閉じる
Call acroPdObj.Close
End If
Set acroPdObj = Nothing
Set jsObj = Nothing
End Sub
参考