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アプリケーションがサポートしていない。

動作するバージョン

VersionAdobe
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
8OKAcrobat 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が標準モジュールで別途必要です。
001 Sub AcroExch_PDPage_AddAnnot() 002 003 Dim objAcroApp As New Acrobat.AcroApp 004 Dim objAcroAVDoc1 As New Acrobat.AcroAVDoc 005 Dim objAcroAVDoc2 As New Acrobat.AcroAVDoc 006 Dim objAcroPDDoc1 As New Acrobat.AcroPDDoc 007 Dim objAcroPDDoc2 As New Acrobat.AcroPDDoc 008 Dim objAcroPDPage2 As Acrobat.AcroPDPage 009 Dim objAcroPDPage2A As Acrobat.AcroPDPage 010 Dim objAcroPDAnnot As Acrobat.AcroPDAnnot 011 Dim lRet As Long '戻り値 012 Dim lCnt As Long '件数 013 Dim i As Long '添え字 014 Dim lMax As Long '注釈数 015 016 'Acrobatを起動表示する 017 lRet = objAcroApp.Show '(注1) 018 'PDFドキュメントを開く 019 lRet = objAcroPDDoc1.Open("E:\Test01.pdf") 020 lRet = objAcroPDDoc2.Open("E:\Test02.pdf") 021 '画面にPDFを表示する。 022 lRet = objAcroAVDoc1.Open("E:\Test01.pdf", "") '(注1) 023 lRet = objAcroAVDoc2.Open("E:\Test02.pdf", "") '(注1) 024 025 '★注意①:目的のPDFの最終ページに追加したい注釈を 026 ' 含んだページを一時期追加する。 027 lRet = objAcroPDDoc2.InsertPages( _ 028 PDLastPage, objAcroPDDoc1, 0, 1, False) 029 030 lCnt = objAcroPDDoc2.GetNumPages - 1 031 032 Set objAcroPDPage2 = objAcroPDDoc2.AcquirePage(0) 033 '★以下の objAcroPDPage2A の使い方が鬼門です。 034 Set objAcroPDPage2A = objAcroPDDoc2.AcquirePage(lCnt) 035 036 'ページに注釈オブジェクトを追加する。 037 lMax = objAcroPDPage2A.GetNumAnnots - 1 038 For i = 0 To lMax 039 Set objAcroPDAnnot = objAcroPDPage2A.GetAnnot(i) 040 lRet = objAcroPDPage2.AddAnnot(-2, objAcroPDAnnot) 041 '注釈のテキスト内容 042 Debug.Print i & "=" & objAcroPDAnnot.GetContents 043 ' "Text","Popup" 044 Debug.Print i & "=" & objAcroPDAnnot.GetSubtype 045 Next i 046 047 '★注意②:Test01.pdfのPDPageオブジェクトを強制解放 048 Set objAcroPDPage2A = Nothing 049 '追加した最終ページを削除する 050 lRet = objAcroPDDoc2.DeletePages(lCnt, lCnt) 051 'Test02.pdfを保存する 052 lRet = objAcroPDDoc2.Save(PDSaveIncremental, "") 053 054 'PDFファイルを閉じる 055 lRet = objAcroPDDoc1.Close 056 lRet = objAcroPDDoc2.Close 057 058 'Acrobatを閉じる 059 lRet = objAcroApp.Hide '(注1) 060 lRet = objAcroApp.Exit '(注1) 061 062 'オブジェクトを強制解放する 063 Set objAcroAVDoc1 = Nothing '(注1) 064 Set objAcroAVDoc2 = Nothing '(注1) 065 Set objAcroPDAnnot = Nothing 066 Set objAcroPDPage2A = Nothing 067 Set objAcroPDPage2 = Nothing 068 Set objAcroPDDoc2 = Nothing 069 Set objAcroPDDoc1 = Nothing 070 Set objAcroApp = Nothing 071 072 End Sub


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

 

実行結果

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等) バージョン
コメントにサンプルコードを入れる時はコードを全て全角文字列にしてください。コチラで半角に戻します。それでもエラーが回避できない時はコメント下さい。個別に対処します。



お仕事で当サイトを見ている方へ
考え込んだら、ご質問下さい。
一緒に解決策を考えましょう。

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