AcroExch.PDPage: AddAnnot メソッド

TOP > AcroExch.PDPage > AddAnnot      [...]


説明

ページに他のテキスト注釈をコピー追加します。

AddNewAnnotメソッドとの違いは同じのPDFドキュメントにある注釈を元にコピーする為に作られたメソッドです。

他のPDFドキュメントからは直接コピー追加は出来ません。

 

形式

VARIANT_BOOL AddAnnot(long nIndexAddAfter,
                           LPDISPATCH iPDAnnot);

 

引数

  1. 第1引数(long nIndexAddAfter) :
    「-2」固定。他の値を指定すると何故か失敗する。
  2. 第2引数(LPDISPATCH iPDAnnot) :
    同じPDFドキュメントにある注釈オブジェクトであるPDAnnotオブジェクト。

 

戻り値

  • -1 : 成功。
  • 0 : 失敗。又はAcrobatアプリケーションがサポートしていない。

 

動作するバージョン

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

 

説明:Test01.pdfの最初の1ページにあるテキスト注釈を全てTest02.pdfの最初にページにコピー追加します。

  • F8キーでステップ実行しながら動作確認する。
  • 事前に参照設定をする。
  • IAC.BASが標準モジュールで別途必要です。

 

Sub AcroExch_PDPage_AddAnnot()

    Dim objAcroApp             As New Acrobat.AcroApp
    Dim objAcroAVDoc1        As New Acrobat.AcroAVDoc
    Dim objAcroAVDoc2        As New Acrobat.AcroAVDoc
    Dim objAcroPDDoc1        As New Acrobat.AcroPDDoc
    Dim objAcroPDDoc2        As New Acrobat.AcroPDDoc
    Dim objAcroPDPage2      As Acrobat.AcroPDPage
    Dim objAcroPDPage2A     As Acrobat.AcroPDPage
    Dim objAcroPDAnnot      As Acrobat.AcroPDAnnot
    Dim lRet                       As Long     '戻り値
    Dim lCnt                      As Long     '件数
    Dim i                          As Long     '添え字
    Dim lMax                    As Long     '注釈数
    
    'Acrobatを起動表示する
    lRet = objAcroApp.Show  '(注1)
    'PDFドキュメントを開く
    lRet = objAcroPDDoc1.Open("E:¥Test01.pdf")
    lRet = objAcroPDDoc2.Open("E:¥Test02.pdf")
    '画面にPDFを表示する。
    lRet = objAcroAVDoc1.Open("E:¥Test01.pdf", "") '(注1)
    lRet = objAcroAVDoc2.Open("E:¥Test02.pdf", "") '(注1)
    
    '★注意①:目的のPDFの最終ページに追加したい注釈を
    '        含んだページを一時期追加する。
    lRet = objAcroPDDoc2.InsertPages( _
            PDLastPage, objAcroPDDoc1, 0, 1, False)
    
    lCnt = objAcroPDDoc2.GetNumPages - 1
    
    Set objAcroPDPage2 = objAcroPDDoc2.AcquirePage(0)
    '★以下の objAcroPDPage2A の使い方が鬼門です。
    Set objAcroPDPage2A = objAcroPDDoc2.AcquirePage(lCnt)
    
    'ページに注釈オブジェクトを追加する。
    lMax = objAcroPDPage2A.GetNumAnnots - 1
    For i = 0 To lMax
        Set objAcroPDAnnot = objAcroPDPage2A.GetAnnot(i)
        lRet = objAcroPDPage2.AddAnnot(-2, objAcroPDAnnot)
        '注釈のテキスト内容
        Debug.Print i & "=" & objAcroPDAnnot.GetContents
        ' "Text","Popup"
        Debug.Print i & "=" & objAcroPDAnnot.GetSubtype
    Next i
    
    '★注意②:Test01.pdfのPDPageオブジェクトを強制解放
    Set objAcroPDPage2A = Nothing
    '追加した最終ページを削除する
    lRet = objAcroPDDoc2.DeletePages(lCnt, lCnt)
    'Test02.pdfを保存する
    lRet = objAcroPDDoc2.Save(PDSaveIncremental, "")

    'PDFファイルを閉じる
    lRet = objAcroPDDoc1.Close
    lRet = objAcroPDDoc2.Close

    'Acrobatを閉じる
    lRet = objAcroApp.Hide      '(注1)
    lRet = objAcroApp.Exit      '(注1)

    'オブジェクトを強制解放する
    Set objAcroAVDoc1 = Nothing  '(注1)
    Set objAcroAVDoc2 = Nothing  '(注1)
    Set objAcroPDAnnot = Nothing
    Set objAcroPDPage2A = Nothing
    Set objAcroPDPage2 = Nothing
    Set objAcroPDDoc2 = Nothing
    Set objAcroPDDoc1 = Nothing
    Set objAcroApp = Nothing

End Sub

 

実行結果

0=これはTest01.PDFのテスト用の1ページ目のテキスト注釈です。
0=Text
1=これはTest01.PDFのテスト用の1ページ目のテキスト注釈です。
1=Popup

 

補足

  • (注1)は無くてもいいです。視覚で動作確認をする為に入れてあるだけです。
  • 上記サンプルは大きく4つの処理に別れています。
    (1) Test01.pdfのコピーしたい注釈が入っているページをTest02.pdfの最終ページに一旦追加する。
    ※PDLastPageは定数で値は-2です。IAC.BAS標準モジュールに入っています。
    (2) Test02.pdfの(追加された)最終ページにある注釈をTest02.pdfの最初のページに全て追加コピーする。
    (3) Test02.pdfの(追加された)最終ページを削除する。
    (4) Test02.pdfを保存する。
  • 見ても分かるように、このAddAnnotメソッドは非常に使いずらいメソッドです。
  • テキスト注釈は1つの注釈で2つのオブジェクト(インデックス)を持っています。
    1つ目は「Text」で編集用です。
    2つ目は「Popup」でマウスを注釈アイコンに持っていくと表示されるポップアップ画面です。
    テキスト注釈はオブジェクト内で上記2つの形式でインデックス管理しています。この点が他のオブジェクトと分かりにくい所です。
  • ・上記サンプルは以下のURLを参考に作りました。
    http://support.adobe.com/devsup/devsup.nsf/docs/51343.htm

 

注意事項

  • 他のPDFドキュメントの注釈からは直接追加コピー出来ません。
    よってサンプルの注意①の処理が必要になります。
    ※いろいろと試してみましたが出来ませんでした。
  • 注意②で「Set objAcroPDPage2A = Nothing」をしないと、次のDeletePagesメソッドが失敗します。
    これはバグの様に思われます。
    ※最終ページ情報を持っている objAcroPDPage2A オブジェクトが Nothing 状態でないので削除出来ないのは、半分は納得も出来るが、やはり問題点だと思われる。

 

動作確認環境

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

 

戻る

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.