AcroExch.PDPage: GetAnnot メソッド

TOP > AcroExch.PDPage > GetAnnot      [...]


説明

配列で管理されている注釈オブジェクトからインデックスで指定された1つの注釈(AcroPDAnnot)オブジェクトを得ます。

形式

LPDISPATCH GetAnnot(long nIndex);

引数

  1. 第1引数(long nIndex) :
    配列で管理されている注釈オブジェクトのインデックスを指定する。

戻り値

  • AcroExch.PDAnnotオブジェクト。

動作するバージョン

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
8NOAcrobat 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ドキュメント内の注釈オブジェクトの種類を集計する。

★注意:以下のサンプルは正しい結果を得るとは限りません。
GetNumAnnotsメソッドが正しく動作している様に見えないからです。

  • F8キーでステップ実行しながら動作確認する。
  • 事前に参照設定をする。
001 Sub AcroExch_AcroPDPage_GetAnnot() 002 003 Debug.Print "Test_AcroPDPage_GetAnnot:" & Now 004 Dim objAcroApp As New Acrobat.AcroApp 005 Dim objAcroAVDoc As New Acrobat.AcroAVDoc 006 Dim objAcroPDDoc As New Acrobat.AcroPDDoc 007 Dim objAcroPDPage As Acrobat.AcroPDPage 008 Dim objAcroAVPageView As Acrobat.AcroAVPageView 009 Dim objAcroPDAnnot As Acrobat.AcroPDAnnot 010 Dim lRet As Long '戻り値 011 Dim lCnt As Long '件数 012 Dim i As Long '添え字 013 Dim k As Long '添え字 014 Dim lPage As Long 'ページ数 015 Dim lPageHitCnt As Long 'ページ数合計 016 017 Dim lAnnots As Long 018 Dim lCntText As Long 019 Dim lCntLink As Long 020 Dim lCntPopup As Long 021 Dim lCntEtc As Long 022 Dim bSkip As Boolean 023 024 lPageHitCnt = 0 025 lCntText = 0 026 lCntLink = 0 027 lCntPopup = 0 028 lCntEtc = 0 029 030 'Acrobatを起動表示する 031 lRet = objAcroApp.Show 032 '画面にPDFドキュメントを表示する。 033 lRet = objAcroAVDoc.Open("E:\Test01.pdf", "") 034 035 Set objAcroAVPageView = objAcroAVDoc.GetAVPageView() 036 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc() 037 038 lPage = objAcroPDDoc.GetNumPages - 1 039 Debug.Print "全頁数=" & lPage + 1 040 041 For i = 0 To lPage 042 'ページ移動する。 043 lRet = objAcroAVPageView.Goto(i) 044 '表示されているページのAcroPDPageを得る 045 Set objAcroPDPage = objAcroAVPageView.GetPage() 046 'ページにおける注釈の数を得ます。★バグ有り? 047 lAnnots = objAcroPDPage.GetNumAnnots - 1 048 bSkip = True 049 For k = 0 To lAnnots 050 '注釈のページ勢ぞろいから指定された注釈を得る 051 '注釈オブジェクトPDAnnotを作成する。★バグか? 052 Set objAcroPDAnnot = objAcroPDPage.GetAnnot(k) 053 bSkip = False 054 Select Case objAcroPDAnnot.GetSubtype 055 Case "Text" 056 lCntText = lCntText + 1 057 Case "Link" 058 lCntLink = lCntLink + 1 059 Case "Popup" 060 lCntPopup = lCntPopup + 1 061 Case Else 062 lCntEtc = lCntEtc + 1 063 End Select 064 ' Debug.Print i & ":" & k & ":" & _ 065 objAcroPDAnnot.GetSubtype 066 ' Debug.Print i & ":" & k & ":" & _ 067 objAcroPDAnnot.GetTitle 068 ' Debug.Print i & ":" & k & ":" & _ 069 objAcroPDAnnot.GetContents 070 Next k 071 If bSkip = False Then 072 lPageHitCnt = lPageHitCnt + 1 073 End If 074 Next i 075 076 Debug.Print "Text の合計=" & lCntText 077 Debug.Print "Popup の合計=" & lCntPopup 078 Debug.Print "Link の合計=" & lCntLink 079 Debug.Print "その他の合計=" & lCntEtc 080 Debug.Print "ヒット頁数=" & lPageHitCnt 081 'PDFファイルを保存しないで閉じる 082 lRet = objAcroPDDoc.Close 083 084 'Acrobatを閉じる 085 lRet = objAcroApp.Hide 086 lRet = objAcroApp.Exit 087 088 'オブジェクトを強制解放する 089 Set objAcroAVDoc = Nothing 090 Set objAcroPDAnnot = Nothing 091 Set objAcroPDPage = Nothing 092 Set objAcroAVPageView = Nothing 093 Set objAcroPDDoc = Nothing 094 Set objAcroApp = Nothing 095 096 End Sub


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

実行結果

Source file Test_AcroPDPage_GetAnnot:2008/07/24 11:32:54 全頁数=34 Text の合計=2 Popup の合計=2 Link の合計=239 その他の合計=0 ヒット頁数=14 Test_AcroPDPage_GetAnnot:2008/07/24 11:33:10 全頁数=34 Text の合計=2 Popup の合計=21 Link の合計=220 その他の合計=0 ヒット頁数=14


※上記は2回実行した結果です。
他の操作も何もしていないのに結果が異なります。
バグが、SDKの解釈ミス(ロジックミス)のどちらかです。

補足

  • F8キーでステップ実行し、各メソッドによりどのような動きをするかよく観察すること。

動作確認環境

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

戻る

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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

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