AcroExch.PDAnnot: SetContents メソッド

TOP > AcroExch.PDAnnot > SetContents      [...]


説明

PDFファイル上のテキスト注釈のテキスト(=コンテンツ)をセットします。

 

形式

VARIANT_BOOL SetContents(BSTR szContents);

 

引数

  1. 第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キーでステップ実行しながら動作確認する。
  • 事前に参照設定をする。

 

Sub AcroExch_PDAnnot_SetContents()

    Debug.Print "AcroExch_PDAnnot_SetContents:" & Now
    Dim objAcroApp            As New Acrobat.AcroApp
    Dim objAcroAVDoc        As New Acrobat.AcroAVDoc
    Dim objAcroPDDoc        As New Acrobat.AcroPDDoc
    Dim objAcroRect           As New Acrobat.AcroRect
    Dim objAcroPDPage       As Acrobat.AcroPDPage
    Dim objAcroPDAnnot      As Acrobat.AcroPDAnnot
    Dim lRet                      As Long     '戻り値
    
    'Acrobatを起動表示する
    lRet = objAcroApp.Show  '(TEST用)
    'PDFドキュメントを開く
    lRet = objAcroPDDoc.Open("E:¥Test01.pdf")
    '画面にPDFを表示する。
    lRet = objAcroAVDoc.Open("E:¥Test01.pdf", "") '(TEST用)
    '1ページ目のPDPageオブジェクトを取得します
    Set objAcroPDPage = objAcroPDDoc.AcquirePage(0)
    'テキスト注釈の4枠サイズをセットする
    With objAcroRect
        .Top = 751
        .bottom = .Top - 60
        .Left = 100
        .Right = .Left + 90
    End With
    'テキスト注釈を追加します
    Set objAcroPDAnnot = objAcroPDPage.AddNewAnnot( _
                            -2, "Text", objAcroRect)
    lRet = objAcroPDAnnot.SetContents( _
            "これはテストのテキスト注釈です。")
    lRet = objAcroPDAnnot.SetOpen(1)    '開く
    '別名でPDFファイルを保存する
    lRet = objAcroPDDoc.Save(PDSaveFull, _
                            "E:¥Test01_A.pdf")
    'PDFファイルを保存しないで閉じる'(TEST用)
    lRet = objAcroPDDoc.Close

    'Acrobatを閉じる
    lRet = objAcroApp.Hide      '(TEST用)
    lRet = objAcroApp.Exit      '(TEST用)
    'オブジェクトを強制解放する
    Set objAcroAVDoc = Nothing  '(TEST用)
    Set objAcroRect = Nothing
    Set objAcroPDAnnot = Nothing
    Set objAcroPDPage = Nothing
    Set objAcroPDDoc = Nothing
    Set objAcroApp = Nothing

End Sub

 

実行結果

TEST_PDAnnot_SetContents:2008/09/12 15:15:13

※実行途中のテキスト注釈

PDAnnot:SetContents メソッド

 

補足

  • 説明では”セット”と言っているが”更新する”とも言える。
  • ここで設定しているobjAcroRectオブジェクトの値はあまり意味を持たない部分がある。

 

動作確認環境

  • WindowsXP Pro(+ SP3) +
    Acrobat 8.1.2 Pro + Office 2003 + MicrosoftUpdate

 

戻る

「AcroExch.PDAnnot: SetContents メソッド」への8件のフィードバック

  1. こんにちは。早速ですが、このページを応用し、テキストボックスを作りました。
    Set objAcroPDAnnot = objAcroPDPage.AddNewAnnot(-2, "FreeText", objAcroRect)
    とするだけで、PDF上にテキストボックスが作成できるのですが、問題が・・・。
    画面上ではちゃんとテキストボックスがあるのに、なぜか印刷されません。
    横に手でテキストボックスを作ると、それは印刷されます。
    もちろん印刷時に「注釈とフォーム」は「文書と注釈」にしています。
    「注釈の一覧」で「印刷する文書に注釈の一覧テキストを含めますか」を「はい」にすると、別紙にテキストボックスの内容のみが印刷されます。

    環境は7 Pro+Excel 2010+Acrobat X Standard です。
    考えられる原因がわかれば教えて下さい。

    追伸、引数の-2を-1にすると、既存のテキストボックスより下層になるようです。その他ではエラーが出ます。

  2. すいまーひろ さんへ。
    返答が複数有りますので、分けて書かせて頂きます。

    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アプリ本体が持っている機能の半分も出来ない事に気がつくと思います。

    少しでも解決につながれば幸いです。

  3. ご指導ありがとうございました。
    テキストボックスの追加でうまくいきました。

  4. お世話に成っています
    御存知でしたら教えて下さい
    文書レベルJavascriptへプログラムを追加する方法て
    どのようにしたら良いのでしょうか?
    Fieldに対しるSetJavaScriptActionのような方法が
    見つからず 困っています。
    やりたいことは 初期処理を文書レベルJavascriptへ
    埋め込みたいのですが...

  5. ありがとうございます。
    うまく行きました。
    今後ともよろしくお願い致します。

  6. 管理人さ~ん

    初めて訪問させていただいています。

    EXCELのシート列として、社員のコード番号が並んでおり、
    その番号を取得して、PDFファイル名にしています。

    例としてA列の1行目から10行目まで各社員コードの
    記載があり、所定範囲のPDF印刷に対して、この社員
    コードを取得して10個のPDFファイル名を自動で
    一気に作成することは、EXCELのVBAにてひとまず出来ました。

    ここで、私は出来れば、B列の1行目から10行目までに
    各社員の指定したパスワードの記載があった場合、この
    パスワードを取得して各PDFにパスワードを設定できれば
    と考えています。

    こうしたことは、可能でしょうか?

    ご教示いただければと思います。

    よろしくお願いいたします。

  7. 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-utils
    https://packages.debian.org/ja/sid/poppler-utils
    GPLソフト。
    パスワードを設定する機能は無いみたいです。
    パスワードが掛かっているPDFを開く時にパスワードを指定するパラメータは存在します。

    GUI画面でのツールなら沢山ありますが、プログラム操作となるとコマンドライン操作が出来るツールに限定されます。

    ご検討ください。

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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

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