透かしをファイルで追加する (addWatermarkFromFile)

TOP > サンプル / 関数 > *      [...]


説明

PDF に別のファイルを使って透かしを追加します。

透かしの追加はAcrobat OLE の JSObject 経由で addWatermarkFromFile メソッドを使って、外部ファイルからPDFへ行います。

透かしをファイルで追加する (addWatermarkFromFile)

 

addWatermarkFromFile

メソッド

Doc オブジェクト / addWatermarkFromFile メソッド

説明

PDFファイルの指定のページに外部ファイルを透かしとして追加します。

形式

JSObject.addWatermarkFromFile  cDIPath , [nSourcePage] , [nStart] , [nEnd] , [bOnTop] , [bOnScreen] , [bOnPrint] , [nHorizAlign] , [nVertAlign] , [nHorizValue] , [nVertValue] , [bPercentage] , [nScale] , [bFixedPrint] , [nRotation]

引数

  1. 第1引数 (cDIPath) :
    透かしに使うファイルのフルパス。
    PDFファイル、JPEG および BMP ファイルが指定できる。   
  2. 第2引数 (nSourcePage) : (オプション)
    透かしに使う第1引数のソースファイルの該当ページを指定。
    0から数える。つまり1頁目は0。デフォルトは0。  
  3. 第3引数 (nStart) : (オプション)
    透かしを追加するPDFのページ範囲で最初のページの番号を指定。
    0から数える。つまり1頁目は0。
    nStart と nEnd を指定しない時は、文書の全てのページが対象になります。
    nStart のみを指定した場合は、nStart で指定した単一のページが対象になります。
    nEnd のみを指定した場合は、0 から nEnd までが対象範囲になります。   
  4. 第4引数 (nEnd) : (オプション)
    透かしを追加するPDFのページ範囲で最後のページの番号を指定。
    指定方法はnStartを参照。  
  5. 第5引数 (bOnTop) : (オプション)
    PDFページ上のコンテンツ(文字、画像等)の上下を指定。
    デフォルトはTrue。
    bFixedPrint が true の場合には無視される。
    • True : コンテンツの上に透かしが表示される。
    • False : コンテンツの下に透かしが表示される。    
  6. 第6引数 (bOnScreen) : (オプション)
    PDFを画面表示する際に、透かしを表示するかどうかを示すブーリアン値。
    デフォルトは True。
    • True : 表示する
    • False : 表示しない  
  7. 第7引数 (bOnPrint) : (オプション)
    PDFを印刷する際に、透かしを表示するかどうかを示すブーリアン値。
    デフォルトは True。
    • True : 表示する
    • False : 表示しない   
  8. 第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. 第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. 第10引数 (nHorizValue) : (オプション)
    ページ上で透かしの水平位置をシフトさせるために使用する数値。
    bPercentage が True の場合、この数値はページの幅のパーセンテージを示す。
    bPercentage が False の場合、この数値はオフセットするポイント数を示す。
    デフォルトは 0。
    「配置」-「左右からの距離」-「基点」項目と同様。   
  11. 第11引数 (nVertValue) : (オプション)
    ページ上で透かしの垂直位置をシフトさせるために使用する数値。
    bPercentage が true の場合、この数値はページの高さのパーセンテージを示す。
    bPercentage が false の場合、この数値はオフセットするポイント数を示す。
    デフォルトは 0 です。
    「配置」-「上下からの距離」-「基点」項目と同様。   
  12. 第12引数 (bPercentage) : (オプション)
    nHorizValue や nVertValue がページサイズのパーセンテージを示すのか、ポイント数を示すのかを表すブーリアン値。
    デフォルトは falseでポイント数を示す。
    • True : パーセンテージを示す
    • False : ポイント数を示す  
  13. 第13引数 (nScale) : (オプション)
    透かしに使用するスケール。
    1.0 が 100 %を意味する。
    値が -1 の場合は、透かし形状を維持したまま、大きさをページにフィットさせます。
    デフォルトは 1.0 です。
    「ページに合わせた相対倍率」項目と同様。   
  14. 第14引数 (bFixedPrint) : (オプション)
    「異なるページサイズで印刷する場合、透かし位置とサイズを一定にする」ことを示すブーリアン値。
    印刷するページのサイズに関係なく、透かしが固定のサイズおよび位置に印刷される。
    True の場合は、bOnTop は無視される。
    デフォルトはFalse です。
    • True : 透かしが固定のサイズおよび位置に印刷する
    • False : 透かしが固定のサイズおよび位置に印刷しない  
  15. 第15引数 (nRotation) : (オプション)
    透かしを反時計回りに回転させる角度。0~360の値を指定。
    デフォルトは 0。
    「回転」項目と同様。   
  16. 第16引数 (nOpacity): (オプション)
    透かしの不透明度を示す。
    0 が透明で、1.0 が不透明。 デフォルトは 1.0。
    「不透明度」項目と同様。

 

サンプル:ExcelのVBA

Downloadsample-JSObject_addWatermarkFromFile.xls

Test.pdf ファイルに透かし用のファイルとして sukasi,pdf を全ページに追加します。

追加したら最適化して test-out.pdf として別名保存します。

  • F8キーでステップ実行しながら動作確認出来ます。
  • 参照設定を事前にする。
001 Sub JSO_addWatermarkFromText() 002      003     Dim objAcroApp      As New Acrobat.AcroApp 004     Dim objAcroPDDoc    As New Acrobat.AcroPDDoc 005     Dim jso             As Object 006     Dim lRet            As Long 007      008     '透かしが追加されるPDFファイル 009     Const CON_PDF_IN    = "D:¥work¥test.pdf" 010     '透かしが追加されたPDFファイル 011     Const CON_PDF_OUT = "D:¥work¥test-out.pdf" 012     '透かし用として追加するファイル 013     Const CON_SUKASI    = "D:¥work¥sukasi.pdf" 014      015     'JSObjectオブジェクト作成時のNothingの回避策 016     'Acrobatアプリを強制的にメモリにロードする 017     lRet = objAcroApp.CloseAllDocs 018      019     'PDFファイルを開く 020     lRet = objAcroPDDoc.Open(CON_PDF_IN) 021     If lRet = False Then 022         MsgBox "AcroExch PDDoc Open エラー" 023         GoTo JSO_addWatermarkFromText_Skip: 024     End If 025      026     Set jso = objAcroPDDoc.GetJSObject 027      028     'PDF文書の指定のページに指定のPDFを透かしとして追加 029     jso.addWatermarkFromFile CON_SUKASI 030      031 JSO_addWatermarkFromText_Skip: 032     'PDFを最適化して別名で保存する 033     lRet = objAcroPDDoc.Save( _ 034          PDSaveFull + PDSaveLinearized + _ 035          PDSaveCollectGarbage, CON_PDF_OUT) 036           037     'アプリケーションの終了 038     lRet = objAcroApp.Hide 039     lRet = objAcroApp.Exit 040 041     'オブジェクトの強制開放  042     Set jso = Nothing 043     Set objAcroPDDoc = Nothing 044     Set objAcroApp = Nothing 045 046 End Sub


 Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
 


実行結果

透かしをファイルで追加する (addWatermarkFromFile)

全ページに同じ様に透かしが追加されました。

 

補足

  1. Acrobat Reader では動作しません。
    Acrobat Pro 本体がデフォルトでインストールされているパソコン環境だけです。  
  2. 上記サンプル、addWatermarkFromFile の第2引数以降はデフォルトです。     
  3. テキストのみの透かしなら addWatermarkFromText メソッドでも対応出来る。     
  4. ダイナミックスタンプ、ビジネススタンプ、メッセージスタンプ等のカスタムスタンプの代わりに透かし機能で代用出来るかもしれません。
    承認済、社外秘、却下、極秘、非公開、公開用等の文字を透かし機能を使って追加出来ます。

注意

  1. Acrobatアプリ本体の透かしの追加のダイアログ画面のデフォルトとは多少異なる結果で追加が行われます。   
  2. 透かしを一括で削除するOLEやAcobat JavaScript等は現時点(2014/02/19)では見つかっていません。
    見つけられなかったのかもしれません。  

名前付き引数

addWatermarkFromText メソッドでは名前付き引数の使用が可能ですが、当 addWatermarkFromFile メソッドでは使用できません。詳細な理由は不明です。

動作確認環境

  • Windows 7 64bit Home + SP1 +
    Acrobat 8.3.1 Pro + Office 2007 + フルMicrosoftUpdate

Adobe Web 解説

  1. JavaScript™ for Acrobat® API Reference
    Adobe® Acrobat® SDK バージョン 8.0
    addWatermarkFromFile メソッドの日本語解説  
  2. JavaScript for Acrobat API Reference
    (Acrobat v10) 英語解説
    addWatermarkFromFile メソッドの英語解説
    (リンク先消滅)   
  3. Acrobatアプリからの透かしの削除方法  日本語解説
    (リンク先消滅)

サンプル一覧

 


サイト管理人のメモ

これ以降はサイト管理人のメモです。

見る必要性は無いです。

「addWatermarkFromFile はPDF文書に透かしを追加すると同時に、
オプショナルコンテンツグループ(OCG)に配置します。」

と Acrobat JavaScriptのマニュアルに記述が有る。ならば、OCGなるものを削除、又は無効にすれば透かしを削除、又は非表示に出来るのではないか?

そこで 511727_js_api_reference.pdf の

「JavaScript™ for Acrobat® API Reference Adobe® Acrobat® SDK バージョン 8.0」の550ページに書かれているサンプルを元に以下のJavaScriptを作成した。

Source file //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特有の性質が存在する可能性が有る。が、現時点では不明。

記録

  1. 初版:2019年5月9日
  2. 2版:2019年7月12日 「名前付き引数」の記事を追加

サンプル一覧

「透かしをファイルで追加する (addWatermarkFromFile)」への5件のフィードバック

  1. いつもお世話になっております。

    jso.addWatermarkFromFile の箇所において、ほかの引数を設定したく思い、

    以下のとおり書いたのですが、「名前付き引数が見つかりません」と警告が出てしまいます。さしあたり第一引数の透かしに使うファイルのみを設定してもうまくいきません。

    jso.addWatermarkFromFile cDIPath:="E:\あいうえお.pdf"

    なお、サンプルのとおり、以下のようにすればうまくいきますが、できればほかの引数も設定したいため、上の記法で書きたいと思っています。
    jso.addWatermarkFromFile "E:\あいうえお.pdf"

    外のサイトを調べても、「cDIPath」で問題ないような気がするのですが・・・ご教示賜れますと幸いです。

    OSはWindows7
    AdobeはAcrobat DC
    Excelは2010です。

  2. sasase さん はじめまして。

    >jso.addWatermarkFromFile cDIPath:="E:\あいうえお.pdf"
    >なお、サンプルのとおり、以下のようにすればうまくいきますが、
    >できればほかの引数も設定したいため、上の記法で書きたいと思っています。
    >jso.addWatermarkFromFile "E:\あいうえお.pdf"

    引数を名前付き「cDIPath:="E:\あいうえお.pdf"」での指定はできません。
    jsoオブジェクトはAcrobatアプリケーション本体に有るAcrobat JavaScriptへ直接連携して操作できます。
    しかし、VBA開発環境に有るオブジェクトブラウザから jso.addWatermarkFromFile の引数に関する内容は見れません。
    見れない詳細な原因は不明ですが、このオブジェクトの構造上の問題と私は思っています。
    よって名前付きはできないと思っています。(経験上

    jso.addWatermarkFromFile "E:\あいうえお.pdf",0,0,5

    の様に前から順番に引数を指定してください。

  3. ありがとうございます

    addWatermarkFromTextメソッドで名前付きが可能であったため、addWatermarkFromFileメソッドでも同様に可能であると思い込んでおりました。

    ご教示いただいたとおり、順番に引数を指定することで解決できました。

    貴サイトにはいつもお世話になっております。この度はお手数いただきありがとうございました。

  4. sasase さんへ。

    addWatermarkFromTextメソッドで名前付き引数が利用できる理由も分かっていません。
    正確には「現状で私に理解できるスキルが無い」が原因と思っています。
    調査したらイイのですが、詳細な原因が分かってもそれ以上は何も出来ない部分と思っています。
    大事なのは「機能通りに動作する」かどうかなので、これ以上の調査は行わないつもりです。

    <追加>
    通常はオブジェクトブラウザで引数の詳細が判ります。
    しかしjsoオブジェクト(Acrobat JavaScript)はオブジェクトブラウザに表示出来ません。
    addWatermarkFromTextメソッドで名前付き引数が利用できるのは、私のスキル以上の理由が有ると思われます。
    時間が出来たときの宿題にさせてください。

  5. ありがとうございます。

    私はとりあえずあちらこちらのサンプルを組み合わせて(とはいえ貴サイトが8割がたですが、、)いるだけで、AdobeやExcelについてよくわかっているわけではありませんので、ご放念いただけると幸いです。

    今後も貴サイトを参考にさせていただければと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


出来るだけ早く返答する様には心がけています。
が、遅くなる時もありますのでご了承ください。


SAMURAI Plugin

コメントをする時は出来れば以下もお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れるとエラーになる場合が有ります。その時はコードの前後に <code> ・・・</code> タグを入れてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください