TOP > AcroExch.PDPage > AddAnnot [...]
説明
ページに他のテキスト注釈をコピー追加します。
AddNewAnnotメソッドとの違いは同じのPDFドキュメントにある注釈を元にコピーする為に作られたメソッドです。
他のPDFドキュメントからは直接コピー追加は出来ません。
形式
VARIANT_BOOL AddAnnot(long nIndexAddAfter,
LPDISPATCH iPDAnnot);
引数
- 第1引数(long nIndexAddAfter) :
「-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の最初にページにコピー追加します。
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
< 戻る >