TOP > サンプル / 関数 > addWatermarkFromText [...]
説明
テキストを透かしでPDF に追加します。
透かしの追加はAcrobat OLE の JSObject 経由で addWatermarkFromText メソッドを使います。
メソッド
Doc オブジェクト / addWatermarkFromText メソッド
説明
PDFファイルの指定ページに透かしを追加します。
形式
JSObject.addWatermarkFromText cText , [nTextAlign] , [cFont] , [nFontSize] , [aColor] , [nStart] , [nEnd] , [bOnTop] , [bOnScreen] , [bOnPrint] , [nHorizAlign] , [nVertAlign] , [nHorizValue] , [nVertValue] , [bPercentage] , [nScale] , [bFixedPrint] , [nRotation]
引数
- 第1引数 (cText) :
透かしとして表示するテキスト。
複数行のテキストを使用する場合はvbCrLfコードで改行を指定します。
※SDKには改行文字に \r 又は ¥r と明記されてますが、出来ません。 - 第2引数 (nTextAlign) : (オプション)
透かしとして表示するテキスト(cText)の整列。
cText が 1 行の場合はこのパラメータを指定しても影響はない。
有効な値は以下のとおり。- jso.app.constants.align.left : 左
- jso.app.constants.align.center : 中央
- jso.app.constants.align.right : 右
- 第3引数 (cFont) : (オプション)
透かしに使用するテキストのフォント。
有効なフォントは、font オブジェクトのプロパティとして定義されています(その一覧については、Field オブジェクトのtextFont プロパティを参照)。
任意のフォントを使用するには、フォントのPostScript 名を表す文字列を渡します。
デフォルトは font.Helv。
※font オブジェクト又はPostScript名 : テキストフォント- jso.font.Times : Times-Roman
- jso.font.TimesB : Times-Bold
- jso.font.TimesI : Times-Italic
- jso.font.TimesBI : Times-BoldItalic
- jso.font.Helv : Helvetica
- jso.font.HelvB : Helvetica-Bold
- jso.font.HelvI : Helvetica-Oblique
- jso.font.HelvBI : Helvetica-BoldOblique
- jso.font.Cour : Courier
- jso.font.CourB : Courier-Bold
- jso.font.CourI : Courier-Oblique
- jso.font.CourBI : Courier-BoldOblique
- jso.font.Symbol : Symbol
- jso.font.ZapfD : ZapfDingbats
- "MS Gothic" : MS ゴシック 注意 *1
- "MS PGothic" : MS Pゴシック 注意 *1
- "MS Mincho" : MS 明朝 注意 *1
- "MS PMincho" : MS P明朝 注意 *1
- "SimSun" : 中国語フォント 注意 *1
- "Meiryo" : メイリオ 注意 *1
- "Meiryo-Italic" : メイリオ・イタリック 注意 *1
- "Meiryo-Bold" : メイリオ・太字 注意 *1
- 第4引数 (nFontSize) : (オプション)
透かしに使用するテキストのフォントのポイントサイズ。
デフォルトは 24。 - 第5引数 (aColor) : (オプション)
透かしに使用するテキストの文字色。
デフォルトは 黒のcolor.black。
※Colorオブジェクト : 色- jso.color.transparent : 透明
- jso.color.black : 黒
- jso.color.white : 白
- jso.color.red : 赤
- jso.color.green : 緑
- jso.color.blue : 青
- jso.color.cyan : シアン
- jso.color.magenta : マゼンタ
- jso.color.yellow : イエロー
- jso.color.dkGray : ダークグレー
- jso.color.gray : グレー
- jso.color.ltGray : ライトグレー
- 第6引数 (nStart) : (オプション)
透かしを追加するPDFのページ範囲で最初のページの番号を指定。
0から数える。つまり1頁目は0。
nStart と nEnd を指定しない時は、文書の全てのページが対象になります。
nStart のみを指定した場合は、nStart で指定した単一のページが対象になります。
nEnd のみを指定した場合は、0 から nEnd までが対象範囲になります。 - 第7引数 (nEnd) : (オプション)
透かしを追加するPDFのページ範囲で最後のページの番号を指定。
指定方法はnStartを参照。 - 第8引数 (bOnTop) : (オプション)
PDFページ上のコンテンツ(文字、画像等)の上下を指定。
デフォルトはTrue。
bFixedPrint が true の場合には無視される。- True : コンテンツの上に透かしが表示される。
- False : コンテンツの下に透かしが表示される。
- 第9引数 (bOnScreen) : (オプション)
PDFを画面表示する際に、透かしを表示するかどうかを示すブーリアン値。
デフォルトは True。- True : 表示する
- False : 表示しない
- 第10引数 (bOnPrint) : (オプション)
PDFを印刷する際に、透かしを表示するかどうかを示すブーリアン値。
デフォルトは True。- True : 表示する
- False : 表示しない
- 第11引数 (nHorizAlign) : (オプション)
透かしの水平方向の整列方法を表す数値。
有効な値については、app.constants.align を参照。
デフォルトはapp.constants.align.center (中央)。
※値とフローティングウィンドウ位置- jso.app.constants.align.left : 左
- jso.app.constants.align.center : 中央
- jso.app.constants.align.right : 右
- 第12引数 (nVertAlign) : (オプション)
透かしの垂直方向の整列方法を表す数値。
有効な値については、app.constants.align を参照。
デフォルトはapp.constants.align.center (中央)。
※値とフローティングウィンドウ位置- jso.app.constants.align.center : 中央
- jso.app.constants.align.top : 上
- jso.app.constants.align.bottom : 下
- 第13引数 (nHorizValue) : (オプション)
ページ上で透かしの水平位置をシフトさせるために使用する数値。
bPercentage が True の場合、この数値はページの幅のパーセンテージを示す。
bPercentage が False の場合、この数値はオフセットするポイント数を示す。
デフォルトは 0。
「配置」-「左右からの距離」-「基点」項目と同様。 - 第14引数 (nVertValue) : (オプション)
ページ上で透かしの垂直位置をシフトさせるために使用する数値。
bPercentage が true の場合、この数値はページの高さのパーセンテージを示す。
bPercentage が false の場合、この数値はオフセットするポイント数を示す。
デフォルトは 0 です。
「配置」-「上下からの距離」-「基点」項目と同様。 - 第15引数 (bPercentage) : (オプション)
nHorizValue や nVertValue がページサイズのパーセンテージを示すのか、ポイント数を示すのかを表すブーリアン値。
デフォルトは falseでポイント数を示す。- True : パーセンテージを示す
- False : ポイント数を示す
- 第16引数 (nScale) : (オプション)
透かしに使用するスケール。
1.0 が 100 %を意味する。
値が -1 の場合は、透かし形状を維持したまま、大きさをページにフィットさせます。
デフォルトは 1.0 です。
「ページに合わせた相対倍率」項目と同様。 - 第17引数 (bFixedPrint) : (オプション)
「異なるページサイズで印刷する場合、透かし位置とサイズを一定にする」ことを示すブーリアン値。
印刷するページのサイズに関係なく、透かしが固定のサイズおよび位置に印刷される。
True の場合は、bOnTop は無視される。
デフォルトはFalse です。- True : 透かしが固定のサイズおよび位置に印刷する
- False : 透かしが固定のサイズおよび位置に印刷しない
- 第18引数 (nRotation) : (オプション)
透かしを反時計回りに回転させる角度。0~360の値を指定。
デフォルトは 0。
「回転」項目と同様。 - 第19引数 (nOpacity): (オプション)
透かしの不透明度を示す。
0 が透明で、1.0 が不透明。 デフォルトは 1.0。
「不透明度」項目と同様。
動作するバージョン
- Acrobat 7 Pro:全角文字は処理できず「・・・」表示になります。
- Acrobat 8 Pro:たぶん、問題無し。
- Acrobat X Pro:問題無し。
- Acrobat XI Pro:問題無し。
サンプル:Excel のVBA
Download:sample-JSObject_addWatermarkFromText.xls
透かしを追加します。
- 透かしは1ページ目のみ
- 透かし文字列は「追加した/透かし文字/印刷時は非表示」の3行
- 透かし文字のフォント(MS明朝)サイズは80ポイント
- 透かし文字の色は青
- 透かし文字は時計反対に30度傾ける
- 透かし文字は水平中央寄りに配置
- 透かし文字は垂直中央から、200ポイント上に配置
- 透かし文字は印刷時に非表示
- test-out.pdf として別名で最適化して保存
- F8キーでステップ実行しながら動作確認出来ます。
- 参照設定を事前にする。
001 Option Explicit
002
003 Public Const PDSaveFull = &H1
004 Public Const PDSaveLinearized = &H4
005 Public Const PDSaveCollectGarbage = &H20
006
007 Sub test_JSO_addWatermarkFromText()
008
009 Dim objAcroApp As New Acrobat.AcroApp
010 Dim objAcroPDDoc As New Acrobat.AcroPDDoc
011 Dim jso As Object
012 Dim lRet As Long
013
014 '透かしが追加されるPDFファイル
015 Const CON_PDF_IN = "D:¥work¥Test-in.pdf"
016 '透かしが追加されたPDFファイル
017 Const CON_PDF_OUT = "D:¥work¥Test-out.pdf"
018
019 'JSObjectオブジェクト作成時のNothingの回避策
020 'Acrobatアプリを強制的にメモリにロードする
021 lRet = objAcroApp.CloseAllDocs
022
023 'PDFファイルを開く
024 lRet = objAcroPDDoc.Open(CON_PDF_IN)
025 If lRet = False Then
026 MsgBox "AcroExch PDDoc Open エラー"
027 GoTo test_JSO_addWatermarkFromText_Skip:
028 End If
029
030 Set jso = objAcroPDDoc.GetJSObject
031
032 'PDF文書の指定のページに透かしを追加する
033 jso.addWatermarkFromText _
034 "追加した" & vbCrLf & "透かし文字" & vbCrLf & "印刷時は非表示", _
035 jso.app.Constants.Align.center, _
036 "MS Mincho", _
037 80, _
038 jso.Color.blue, _
039 0, _
040 0, _
041 True, _
042 True, _
043 False, _
044 jso.app.Constants.Align.center, _
045 jso.app.Constants.Align.center, _
046 0, _
047 200, _
048 False, _
049 1, _
050 False, _
051 30, _
052 0.5
053
054 test_JSO_addWatermarkFromText_Skip:
055
056 'PDFを最適化して別名で保存する。
057 lRet = objAcroPDDoc.Save( _
058 PDSaveFull + PDSaveLinearized + _
059 PDSaveCollectGarbage, CON_PDF_OUT)
060
061 'アプリケーションの終了
062 'オブジェクトの強制開放
063 Set jso = Nothing
064 Set objAcroPDDoc = Nothing
065 Set objAcroApp = Nothing
066
067 Debug.Print "End: " & Date & " " & Time
068 End Sub
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
実行結果
補足
- Acrobat Reader では動作しません。
Acrobat Pro 本体がデフォルトでインストールされているパソコン環境だけです。 - 下線付きの文字を入れることはaddWatermarkFromText メソッドでは出来ません。
その場合はaddWatermarkFromFile メソッドを使って下さい。 - addWatermarkFromText の引数の全ての動作確認はしていません。
- 独特のフォント等を使った透かし又は画像の透かしなら addWatermarkFromFile メソッドがお勧めです。
事前にAcrobatで透かし用のファイルを作成して、addWatermarkFromFile メソッドで追加できます。 - ダイナミックスタンプ、ビジネススタンプ、メッセージスタンプ等のカスタムスタンプの代わりに透かし機能で代用出来るかもしれません。
承認済、社外秘、却下、極秘、非公開、公開用等の文字を透かし機能を使って追加出来ます。
注意
- *1 : Windows 7 64bit Home + Excel 2007 環境下 で動作確認をして出した結果です。
日本語フォントの指定方法がネット検索等でも見つけられなかったので独自の視点から割り出しました。 - 透かしを一括で削除するOLEやAcobat JavaScript等は現時点(2014/02/24)では見つかっていません。
見つけられなかったのかもしれません。 - 当ページで解説している引数の説明に関してはAcrobat JavaScriptのマニュアルを御覧ください。
当サイトに質問をされても返事は出来ません。
理由:質問に返答出来るまで Acrobat JavaScript を理解してないからです。
名前付き引数
以下の様に引数に名前付きが使用できます。
jso.addWatermarkFromText cText:="xxxx", nTextAlign:=jso.app.Constants.Align.center
しかし、名前付き引数がVBAから使用できる理由が当サイトでは分かっていません。よって、名前付きでの引数使用は推奨できません。
動作確認環境
- 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) 英語解説
addWatermarkFromText メソッドの英語解説
(リンク先消滅) - Acrobatアプリからの透かしの削除方法 日本語解説
(リンク先消滅) - MSのフォントに関してはココも参照した
- Watermarking a PDF with JavaScript and Acrobat X
- PDFファイルにヘッダーとフッターを追加するVBAマクロ
- 511340_AcroJSGuide.pdf
< サンプル一覧 >
サイト管理人のメモ
これ以降はサイト管理人のメモなので見なくても結構です。
以下のPostScript名も扱える。
"MS UI Gothic"
"Meiryo UI"
"Meiryo UI-Bold"
"Meiryo UI-Italic"
以下のPostScript名は実行時にエラーになる。
"Verdana"
"Viva-Regular"
"Wingdings"
"MS Pゴシック"
"MS P明朝"
"MSゴシック"
"MS明朝"
"msgothic"
"HeiseiMin-W3-UniJIS-UCS2-H"
'HeiseiMin-W3'
'UniJIS-UCS2-H'
"KozMinPro-Regular”
"HeiseiKakuGo-W5”
記録
- 初版:2015年5月9日
- 2版:2019年7月12日
< サンプル一覧 >
はじめまして。いつもHP拝見させていただいております。
こちらのページを参考にして
エクセルのセルに指定されたPDF
(例A1にC:\Users\admin\Desktop\111.PDF)
に別セルに指定された透かしを(例B1に"あいうえお")
を入れたいのですが
サンプルのコードを入れて走らせるところからつまずいております。
上記サンプルをの「追加した透かし文字"印刷時は非表示」が
全て「・・・」で表示されてしまいます。
数字とアルファベットはうまく表示されるのですが・・・
おそらくフォント関係かと思いフォントをいろいろ変えてみたのですがうまくいきませんでした。
何が原因か教えていただけないでしょうか。
当方の環境は
・OS名 バージョン:Windows 7 Professional
・Acrobat バージョン:Adobe Acrobat 7.0 Professional
・ツール(Excel等) バージョンOS:Office Home and Business 2016
上記になります。
あつし さん
はじめまして。
(直ちに動作確認できる Acrobat 7.0 環境が今は無い。)
(上記のサンプルはAcrobat 8.0で確認した様な・・)
とりあえず、動作したサンプルをダウンロードが出来るようにしましたので、コチラを御覧ください。
そのページ上に有る PDF-JSObject-yyyymmdd.zip 部分をクリックするとダウンロード出来ます。Dropbox からのダウンロード方法の詳細も書いてありますから御覧ください。
<★追加★>どうしても出来ない場合は、透かし部分を別のPDFファイルで事前に作ってやる addWatermarkFromFile の方法もご検討ください。
結果を期待したいです。
めちゃめちゃ早い回答ありがとうございます。
早速サンプルをダウンロードし実行してみましたが
やはり漢字(全角文字)が全て点になってしまいました。
当方がVBAを最近触りだした素人ですので他の初歩的なミスも
あるのかと思います。
Acrobatの他バージョンも視野に入れて方法を模索してみます。
大変ありがとうございました。
先程acrobat x pro体験版をインストールしたところ、無事全角文字が入力できました。やはりacrobat 7 proが古いことが原因だったようです。
お騒がせしてすいませんでした。
あつし さんへ。
結果は当ページに書かせていただきます。
ご報告、ありがとうございます。