説明
PDF に別のファイルを使って透かしを追加します。
透かしの追加はAcrobat OLE の JSObject 経由で addWatermarkFromFile メソッドを使って、外部ファイルからPDFへ行います。
addWatermarkFromFile
メソッド
Doc オブジェクト / addWatermarkFromFile メソッド
説明
PDFファイルの指定のページに外部ファイルを透かしとして追加します。
形式
JSObject.addWatermarkFromFile cDIPath , [nSourcePage] , [nStart] , [nEnd] , [bOnTop] , [bOnScreen] , [bOnPrint] , [nHorizAlign] , [nVertAlign] , [nHorizValue] , [nVertValue] , [bPercentage] , [nScale] , [bFixedPrint] , [nRotation]
引数
- 第1引数 (cDIPath) :
透かしに使うファイルのフルパス。
PDFファイル、JPEG および BMP ファイルが指定できる。
- 第2引数 (nSourcePage) : (オプション)
透かしに使う第1引数のソースファイルの該当ページを指定。
0から数える。つまり1頁目は0。デフォルトは0。
- 第3引数 (nStart) : (オプション)
透かしを追加するPDFのページ範囲で最初のページの番号を指定。
0から数える。つまり1頁目は0。
nStart と nEnd を指定しない時は、文書の全てのページが対象になります。
nStart のみを指定した場合は、nStart で指定した単一のページが対象になります。
nEnd のみを指定した場合は、0 から nEnd までが対象範囲になります。
- 第4引数 (nEnd) : (オプション)
透かしを追加するPDFのページ範囲で最後のページの番号を指定。
指定方法はnStartを参照。
- 第5引数 (bOnTop) : (オプション)
PDFページ上のコンテンツ(文字、画像等)の上下を指定。
デフォルトはTrue。
bFixedPrint が true の場合には無視される。- True : コンテンツの上に透かしが表示される。
- False : コンテンツの下に透かしが表示される。
- 第6引数 (bOnScreen) : (オプション)
PDFを画面表示する際に、透かしを表示するかどうかを示すブーリアン値。
デフォルトは True。- True : 表示する
- False : 表示しない
- 第7引数 (bOnPrint) : (オプション)
PDFを印刷する際に、透かしを表示するかどうかを示すブーリアン値。
デフォルトは True。- True : 表示する
- False : 表示しない
- 第8引数 (nHorizAlign) : (オプション)
透かしの水平方向の整列方法を表す数値。
有効な値については、app.constants.align を参照。
デフォルトはapp.constants.align.center (中央)。
※値とフローティングウィンドウ位置- jso.app.constants.align.left : 左
- jso.app.constants.align.center : 中央
- jso.app.constants.align.right : 右
- 第9引数 (nVertAlign) : (オプション)
透かしの垂直方向の整列方法を表す数値。
有効な値については、app.constants.align を参照。
デフォルトはapp.constants.align.center (中央)。
※値とフローティングウィンドウ位置- jso.app.constants.align.center : 中央
- jso.app.constants.align.top : 上
- jso.app.constants.align.bottom : 下
- 第10引数 (nHorizValue) : (オプション)
ページ上で透かしの水平位置をシフトさせるために使用する数値。
bPercentage が True の場合、この数値はページの幅のパーセンテージを示す。
bPercentage が False の場合、この数値はオフセットするポイント数を示す。
デフォルトは 0。
「配置」-「左右からの距離」-「基点」項目と同様。
- 第11引数 (nVertValue) : (オプション)
ページ上で透かしの垂直位置をシフトさせるために使用する数値。
bPercentage が true の場合、この数値はページの高さのパーセンテージを示す。
bPercentage が false の場合、この数値はオフセットするポイント数を示す。
デフォルトは 0 です。
「配置」-「上下からの距離」-「基点」項目と同様。
- 第12引数 (bPercentage) : (オプション)
nHorizValue や nVertValue がページサイズのパーセンテージを示すのか、ポイント数を示すのかを表すブーリアン値。
デフォルトは falseでポイント数を示す。- True : パーセンテージを示す
- False : ポイント数を示す
- 第13引数 (nScale) : (オプション)
透かしに使用するスケール。
1.0 が 100 %を意味する。
値が -1 の場合は、透かし形状を維持したまま、大きさをページにフィットさせます。
デフォルトは 1.0 です。
「ページに合わせた相対倍率」項目と同様。
- 第14引数 (bFixedPrint) : (オプション)
「異なるページサイズで印刷する場合、透かし位置とサイズを一定にする」ことを示すブーリアン値。
印刷するページのサイズに関係なく、透かしが固定のサイズおよび位置に印刷される。
True の場合は、bOnTop は無視される。
デフォルトはFalse です。- True : 透かしが固定のサイズおよび位置に印刷する
- False : 透かしが固定のサイズおよび位置に印刷しない
- 第15引数 (nRotation) : (オプション)
透かしを反時計回りに回転させる角度。0~360の値を指定。
デフォルトは 0。
「回転」項目と同様。
- 第16引数 (nOpacity): (オプション)
透かしの不透明度を示す。
0 が透明で、1.0 が不透明。 デフォルトは 1.0。
「不透明度」項目と同様。
サンプル:ExcelのVBA
Test.pdf ファイルに透かし用のファイルとして sukasi,pdf を全ページに追加します。
追加したら最適化して test-out.pdf として別名保存します。
- F8キーでステップ実行しながら動作確認出来ます。
- 参照設定を事前にする。
Sub JSO_addWatermarkFromText()
Dim objAcroApp As New Acrobat.AcroApp
Dim objAcroPDDoc As New Acrobat.AcroPDDoc
Dim jso As Object
Dim lRet As Long
'透かしが追加されるPDFファイル
Const CON_PDF_IN = "D:¥work¥test.pdf"
'透かしが追加されたPDFファイル
Const CON_PDF_OUT = "D:¥work¥test-out.pdf"
'透かし用として追加するファイル
Const CON_SUKASI = "D:¥work¥sukasi.pdf"
'JSObjectオブジェクト作成時のNothingの回避策
'Acrobatアプリを強制的にメモリにロードする
lRet = objAcroApp.CloseAllDocs
'PDFファイルを開く
lRet = objAcroPDDoc.Open(CON_PDF_IN)
If lRet = False Then
MsgBox "AcroExch PDDoc Open エラー"
GoTo JSO_addWatermarkFromText_Skip:
End If
Set jso = objAcroPDDoc.GetJSObject
'PDF文書の指定のページに指定のPDFを透かしとして追加
jso.addWatermarkFromFile CON_SUKASI
JSO_addWatermarkFromText_Skip:
'PDFを最適化して別名で保存する
lRet = objAcroPDDoc.Save( _
PDSaveFull + PDSaveLinearized + _
PDSaveCollectGarbage, CON_PDF_OUT)
'アプリケーションの終了
lRet = objAcroApp.Hide
lRet = objAcroApp.Exit
'オブジェクトの強制開放
Set jso = Nothing
Set objAcroPDDoc = Nothing
Set objAcroApp = Nothing
End Sub
実行結果
全ページに同じ様に透かしが追加されました。
補足
- Acrobat Reader では動作しません。
Acrobat Pro 本体がデフォルトでインストールされているパソコン環境だけです。
- 上記サンプル、addWatermarkFromFile の第2引数以降はデフォルトです。
- テキストのみの透かしなら addWatermarkFromText メソッドでも対応出来る。
- ダイナミックスタンプ、ビジネススタンプ、メッセージスタンプ等のカスタムスタンプの代わりに透かし機能で代用出来るかもしれません。
承認済、社外秘、却下、極秘、非公開、公開用等の文字を透かし機能を使って追加出来ます。
注意
- Acrobatアプリ本体の透かしの追加のダイアログ画面のデフォルトとは多少異なる結果で追加が行われます。
- 透かしを一括で削除するOLEやAcobat JavaScript等は現時点(2014/02/19)では見つかっていません。
見つけられなかったのかもしれません。
動作確認環境
- Windows 7 64bit Home + SP1 +
Acrobat 8.3.1 Pro + Office 2007 + フルMicrosoftUpdate
Adobe Web 解説
- JavaScript™ for Acrobat® API Reference
Adobe® Acrobat® SDK バージョン 8.0
addWatermarkFromFile メソッドの日本語解説
- JavaScript for Acrobat API Reference
(Acrobat v10) 英語解説
addWatermarkFromFile メソッドの英語解説
- Acrobatアプリからの透かしの削除方法 日本語解説
< サンプル一覧 >
サイト管理人のメモ
これ以降はサイト管理人のメモです。
見る必要性は無いです。
「addWatermarkFromFile はPDF文書に透かしを追加すると同時に、
オプショナルコンテンツグループ(OCG)に配置します。」
と Acrobat JavaScriptのマニュアルに記述が有る。ならば、OCGなるものを削除、又は無効にすれば透かしを削除、又は非表示に出来るのではないか?
そこで 511727_js_api_reference.pdf の
「JavaScript™ for Acrobat® API Reference Adobe® Acrobat® SDK バージョン 8.0」の550ページに書かれているサンプルを元に以下のJavaScriptを作成した。
//p.550 透かしOCGをオフで非表示に設定
var ocgArray = this.getOCGs();
for (var i=0; i < ocgArray.length; i++) {
if (ocgArray[i].name == "Watermark") {
ocgArray[i].state = false;
}
}
上記を文書レベルのJavaScriptに追加する。
しかし、追加時には正常に処理して透かしを非表示にするが、PDF文書を保存して、再度表示すると実行されない。
正確には実行されるが、falseが反映されない。
上記JavaScriptの実行前に
app.alert("xx");
を入れるとAcrobat Pro 8 では反映されるが Adobe Reader XI では反映されない。
OCG特有の性質が存在する可能性が有る。が、現時点では不明。
< サンプル一覧 >