TOP > AcroExch.PDAnnot > SetContents [...]
説明
PDFファイル上のテキスト注釈のテキスト(=コンテンツ)をセットします。
形式
VARIANT_BOOL SetContents(BSTR szContents);
引数
- 第1引数(BSTR szContents) :
テキスト注釈の文字列
戻り値
- -1 : 設定出来た。
- 0 : 設定出来なかった。
動作するバージョン
Version | Adobe Acrobat | 備考 |
---|---|---|
4 | - | Acrobat 4.0 ※Windows 98SE + Excel 2000 |
5 | - | Acrobat 5.0.5 |
6 | - | Acrobat 6.0.3 Pro |
7 | - | Acrobat 7.0.9 Pro Acrobat 7.1.4 Pro |
8 | OK | Acrobat 8.1.2 Pro |
9 | - | Acrobat 9.3.2 Extended |
10 | - | Acrobat X (10.1.8) Extended |
11 | - | Acrobat XI (11.0.04) Extended |
- OK = 動作する。
- NO = 動作しない。 戻り値が0を返す。
- - = 未確認。
サンプル:ExcelのVBA
説明:PDFファイルの1ページ目にテキスト注釈を追加する。
- F8キーでステップ実行しながら動作確認する。
- 事前に参照設定をする。
001 Sub AcroExch_PDAnnot_SetContents()
002
003 Debug.Print "AcroExch_PDAnnot_SetContents:" & Now
004 Dim objAcroApp As New Acrobat.AcroApp
005 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
006 Dim objAcroPDDoc As New Acrobat.AcroPDDoc
007 Dim objAcroRect As New Acrobat.AcroRect
008 Dim objAcroPDPage As Acrobat.AcroPDPage
009 Dim objAcroPDAnnot As Acrobat.AcroPDAnnot
010 Dim lRet As Long '戻り値
011
012 'Acrobatを起動表示する
013 lRet = objAcroApp.Show '(TEST用)
014 'PDFドキュメントを開く
015 lRet = objAcroPDDoc.Open("E:\Test01.pdf")
016 '画面にPDFを表示する。
017 lRet = objAcroAVDoc.Open("E:\Test01.pdf", "") '(TEST用)
018 '1ページ目のPDPageオブジェクトを取得します
019 Set objAcroPDPage = objAcroPDDoc.AcquirePage(0)
020 'テキスト注釈の4枠サイズをセットする
021 With objAcroRect
022 .Top = 751
023 .bottom = .Top - 60
024 .Left = 100
025 .Right = .Left + 90
026 End With
027 'テキスト注釈を追加します
028 Set objAcroPDAnnot = objAcroPDPage.AddNewAnnot( _
029 -2, "Text", objAcroRect)
030 lRet = objAcroPDAnnot.SetContents( _
031 "これはテストのテキスト注釈です。")
032 lRet = objAcroPDAnnot.SetOpen(1) '開く
033 '別名でPDFファイルを保存する
034 lRet = objAcroPDDoc.Save(PDSaveFull, _
035 "E:\Test01_A.pdf")
036 'PDFファイルを保存しないで閉じる'(TEST用)
037 lRet = objAcroPDDoc.Close
038
039 'Acrobatを閉じる
040 lRet = objAcroApp.Hide '(TEST用)
041 lRet = objAcroApp.Exit '(TEST用)
042 'オブジェクトを強制解放する
043 Set objAcroAVDoc = Nothing '(TEST用)
044 Set objAcroRect = Nothing
045 Set objAcroPDAnnot = Nothing
046 Set objAcroPDPage = Nothing
047 Set objAcroPDDoc = Nothing
048 Set objAcroApp = Nothing
049
050 End Sub
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
実行結果
TEST_PDAnnot_SetContents:2008/09/12 15:15:13
※実行途中のテキスト注釈
補足
- 説明では”セット”と言っているが”更新する”とも言える。
- ここで設定しているobjAcroRectオブジェクトの値はあまり意味を持たない部分がある。
動作確認環境
- WindowsXP Pro(+ SP3) +
Acrobat 8.1.2 Pro + Office 2003 + MicrosoftUpdate
< 戻る >
こんにちは。早速ですが、このページを応用し、テキストボックスを作りました。
Set objAcroPDAnnot = objAcroPDPage.AddNewAnnot(-2, "FreeText", objAcroRect)
とするだけで、PDF上にテキストボックスが作成できるのですが、問題が・・・。
画面上ではちゃんとテキストボックスがあるのに、なぜか印刷されません。
横に手でテキストボックスを作ると、それは印刷されます。
もちろん印刷時に「注釈とフォーム」は「文書と注釈」にしています。
「注釈の一覧」で「印刷する文書に注釈の一覧テキストを含めますか」を「はい」にすると、別紙にテキストボックスの内容のみが印刷されます。
環境は7 Pro+Excel 2010+Acrobat X Standard です。
考えられる原因がわかれば教えて下さい。
追伸、引数の-2を-1にすると、既存のテキストボックスより下層になるようです。その他ではエラーが出ます。
すいまーひろ さんへ。
返答が複数有りますので、分けて書かせて頂きます。
1. Acrobat X Standard バージョンに関してですが。
確証が持てる情報を見つけるのは時間的に無理と思っていますので以下、予想で返答します。
Acrobat 7 , 8 に関しはStandardバージョンではOLE(IAC)は利用できません。
利用できるのはProfessionalバージョンのみです。SDKに記述有り。
よってAcrobat X StandardでOLEが動作するとは思っていません。
環境も無いので調査は残念ですが不可です。
但し、すいまーひろさんの環境で正常に動作しているのであれば、可として頂いても結構です。確証は無いですが。
2.OLEで作成した(注釈)テキストボックスが画面上では表示されても印刷されない現象はこちらのテスト環境でも確認しました。
プロパティ上はなんら違いは無いです。
この印刷されないテキストボックスの対処は無いです。
バグと思っているからです。
それに関する詳細は次の3で。
3. OLEのテキスト注釈のAnnot関連のメソッドは絶望的な状態です。
かなりの時間を掛けて調査しましたが、まともに最後まで動作した記憶が無いです。
この箇所に関してはAcrobat 7と8バージョンで調査した結果をサイトに紹介しています。
ただOLEに関してはメーカ側の技術提供はAcrobat 7バージョンでストップしています。
よってAcrobat Xでも同じ結果になるはずです。実際に同じでした。
この情報に関してはメーカーでの公表等は見当たらなく、サイト管理人の経験上の結果です。
4. 逃げ手 - その①
テキスト文字の表示だけに注目すれば、フォームフィールドのテキストボックス・フィールドとして表示すれば可能です。
AFormAutオブジェクトのテキストボックス追加をサンプルとして御覧ください。
フォームフィールドに関するメソッドやプロパティは沢山有るのですが、技術的な需要が無いと思われたので、必要最低限の解説にとどまっています。
5. 逃げ手 - その②
AFormAutオブジェクトのAcrobat JavaScriptの実行でテキスト注釈を追加します。
試していませんが、Acrobat JavaScript上でテキスト注釈(テキストボックス)を作成すれば印刷出来るかもしれません。
Acrobat JavaScriptに関してはコチラを御覧ください。
Acrobat JavaScriptに関しては返答出来るレベルでは無いので動作検証はしていません。
6. PDFをOLEだけで操作するのは当サイトを見れば無理と分かるはずです。
今後、PDFを操作する上でAcrobat JavaScriptの使用が不可欠になってくる場合が有るはずです。
どうしてもプログラミング的な操作をしたい時はAcrobat JavaScriptも視野に入れてください。
それでもAcrobatアプリ本体が持っている機能の半分も出来ない事に気がつくと思います。
少しでも解決につながれば幸いです。
ご指導ありがとうございました。
テキストボックスの追加でうまくいきました。
お世話に成っています
御存知でしたら教えて下さい
文書レベルJavascriptへプログラムを追加する方法て
どのようにしたら良いのでしょうか?
Fieldに対しるSetJavaScriptActionのような方法が
見つからず 困っています。
やりたいことは 初期処理を文書レベルJavascriptへ
埋め込みたいのですが...
AKIRA さんへ。
AFormAut : Fields.AddDocJavascript メソッド
上記メソッドで文書レベルのJavaScriptの追加が出来たはずです。
サンプルは結構、手が込んだ内容でわかりにくいかもしれません。
質問内容にあった返答が出来ていることを願ってます。
ありがとうございます。
うまく行きました。
今後ともよろしくお願い致します。
管理人さ~ん
初めて訪問させていただいています。
EXCELのシート列として、社員のコード番号が並んでおり、
その番号を取得して、PDFファイル名にしています。
例としてA列の1行目から10行目まで各社員コードの
記載があり、所定範囲のPDF印刷に対して、この社員
コードを取得して10個のPDFファイル名を自動で
一気に作成することは、EXCELのVBAにてひとまず出来ました。
ここで、私は出来れば、B列の1行目から10行目までに
各社員の指定したパスワードの記載があった場合、この
パスワードを取得して各PDFにパスワードを設定できれば
と考えています。
こうしたことは、可能でしょうか?
ご教示いただければと思います。
よろしくお願いいたします。
run0450run さん
はじめまして
当サイト内の現時点( 2014/12/28 )での技術情報からでは出来ません。
しかし以下のソフトならコマンドライン起動でのパスワード設定が出来るのではないかと想像しています。
① PDFtk
https://www.pdflabs.com/tools/pdftk-server/
GPLライセンスです。PDFtkは昔からPDFを編集するツールとして有名なソフトです。
知らない間にバージョンアップがされ有償版も出ていますが、GPLのフリー版はそのままで提供されています。
PDF仕様が上がったPDFファイルでも使用できるか等のテストは未確認です。
「pdftk decrypt パスワード」で検索すれば日本語解説が見つかります。
② QPDF
http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?QPDF
GPLに似たArtisticライセンスです。
パスワード設定が出来そうですが、これも未検証です。
③ PDFill PDF Editor
http://www.pdfill.com/
一部の機能は無料版として提供されていますが、
コマンドラインでのパスワード設定が出来るのは有償版のみです。
(と、サイトに書かれてました)
④ xpdf-utilshttps://packages.debian.org/ja/sid/poppler-utils
GPLソフト。
パスワードを設定する機能は無いみたいです。
パスワードが掛かっているPDFを開く時にパスワードを指定するパラメータは存在します。
GUI画面でのツールなら沢山ありますが、プログラム操作となるとコマンドライン操作が出来るツールに限定されます。
ご検討ください。