AcroExch.PDAnnot: GetSubtype メソッド

TOP > AcroExch.PDAnnot > GetSubtype      [...]


説明

注釈のタイプを得ます。

タイプは Text , Popup , Link の3種類です。

 

形式

BSTR GetSubtype();

 

引数

  1. 無し。

 

戻り値

  • Text , Popup , Link の文字列のどれかを返します。

 

動作するバージョン

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
NO
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ファイルの指定ページの注釈のタイプを得ます。

  • F8キーでステップ実行しながら動作確認する。
  • 事前に参照設定をする。

 

Sub AcroExch_PDAnnot_GetSubtype()

    Debug.Print "TEST_PDAnnot_GetSubtype:" & Now
    Dim objAcroAVDoc        As New Acrobat.AcroAVDoc
    Dim objAcroPDDoc        As Acrobat.AcroPDDoc
    Dim objAcroPDPage       As Acrobat.AcroPDPage
    Dim objAcroPDAnnot      As Acrobat.AcroPDAnnot
    Dim lAnnotsCnt          As Long     '注釈数
    Dim lTextCnt             As Long     '件数
    Dim lRet                   As Long     '戻り値
    Dim j                       As Long     '添え字
    Dim lText                 As Long
    Dim lPopUp              As Long
    Dim lLink                  As Long
    Const CON_PAGE = 0              'ページ番号
    
    lTextCnt = 0
    lText = 0
    lPopUp = 0
    lLink = 0
    'PDFドキュメントを開いて表示する
    lRet = objAcroAVDoc.Open("E:¥Test01.pdf", "")
    Set objAcroPDDoc = objAcroAVDoc.GetPDDoc()
    '2頁目のページ・オブジェクトを得る ★注意①
    Set objAcroPDPage = _
        objAcroPDDoc.AcquirePage(CON_PAGE)
    Debug.Print "頁=" & CON_PAGE
    'ページに存在する注釈数を得る ★注意②
    lAnnotsCnt = objAcroPDPage.GetNumAnnots() - 1
    Debug.Print "全注釈数=" & (lAnnotsCnt + 1)
    For j = 0 To lAnnotsCnt
        Set objAcroPDAnnot = objAcroPDPage.GetAnnot(j)
        With objAcroPDAnnot
            Debug.Print "(" & j & ")GetSubtype=" & _
                        .GetSubtype
            Debug.Print "   GetContents=" & _
                        .GetContents
            Select Case .GetSubtype
            Case "Text": lText = lText + 1
            Case "Popup": lPopUp = lPopUp + 1
            Case "Link": lLink = lLink + 1
            Case Else: MsgBox "Program Error(" & _
                        .GetSubtype & ")"
            End Select
        End With
        lTextCnt = lTextCnt + 1
    Next j
    Debug.Print "Text  =" & lText & " 件"
    Debug.Print "Popup =" & lPopUp & " 件"
    Debug.Print "Link  =" & lLink & " 件"
    Debug.Print "全件数=" & lTextCnt & " 件"
    
    'PDFファイルを保存しないで閉じる
    lRet = objAcroAVDoc.Close(1)
    'オブジェクトを強制解放する
    Set objAcroAVDoc = Nothing
    Set objAcroPDAnnot = Nothing
    Set objAcroPDPage = Nothing
    Set objAcroPDDoc = Nothing

End Sub

 

実行結果(1)  頁=1の時、異常処理

TEST_PDAnnot_GetRect:2008/08/12 12:51:16
頁=0
全注釈数=4
(0)GetSubtype=Text
GetContents=1/2 これはTest01.PDFのテスト用の1ページ目のテキスト注釈です。
(1)GetSubtype=Popup
GetContents=1/2 これはTest01.PDFのテスト用の1ページ目のテキスト注釈です。
(2)GetSubtype=Text
GetContents=1/2 これはTest01.PDFのテスト用の1ページ目のテキスト注釈です。
(3)GetSubtype=Popup
GetContents=1/2 これはTest01.PDFのテスト用の1ページ目のテキスト注釈です。
Text =2 件
Popup =2 件
Link =0 件
全件数=4 件

※上記PDFページは以下の様になっている。
2番目の注釈が表示されてない。

PDAnnot:GetSubtype メソッド(1)

 

実行結果(2)  頁=3の時、異常処理

TEST_PDAnnot_GetRect:2008/08/12 12:39:57
頁=2
全注釈数=41
(0)GetSubtype=Link
GetContents=
(1)GetSubtype=Link
GetContents=
(2)GetSubtype=Link
GetContents=
(3)GetSubtype=Link
GetContents=
・・・・・・・<省略>・・・・・・・
(39)GetSubtype=Link
GetContents=
(40)GetSubtype=Link
GetContents=
Text =0 件
Popup =0 件
Link =41 件
全件数=41 件

※上記PDFページは以下の様になっている。
注釈が1つ表示されてない。

PDAnnot:GetSubtype メソッド(2)

  

補足

  • 「★注意①」と「★注意②」の部分が動作不良を起こしている模様です。
    正確に処理できません。
     

 

動作確認環境

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

 

戻る

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

  1. 貴重な情報提供ありがとうございます。まだまだ実態確認の途中ですが、気づいたことを書いておきます。

    1.Acrobat上の挿入操作1つにつき、データでは2つの注釈(Popup型 + 選択それぞれ)が挿入される
    「選択それぞれ」の部分は通常のノート注釈であればTextタイプ、テキスト注釈(PDFのテキストデータに対する注釈挿入)であればCaretです。Acrobat8の注釈ツールバーで挿入できるもので試してみたところ、全てこの形で入っています。このためGetNumAnnots()が期待する数字の2倍で返ります。
    鉛筆ツールでテキストを入れなかった場合などでも空のPopupデータが作られます。タイプには鉛筆ツールがInk, 雲がPolygonなど多くの型があります。

    2.注釈を取得する際にはPDPageを格納した変数からではなく
    objAcroPDDoc.AcquirePage(i).GetAnnot(j)で取得するようにし、また、すぐ次のループで代入があるとしても、一旦PDAnnot変数にNothingを入れておくと安定するようです。

    お役に立てば幸いです。

    蛇足ですが、貴ブログのコードを流用させていただく時に、FireFoxで表示してVBエディタにコピペすると、マイナス記号がマイナス記号2連続に化けるようです。貼り付け先がメモ帳などの場合には問題ありません。プログラミング初心者はあまり見にこない記事と思いますが一応。

  2. のりさん。初めまして。

    タイプにInkとPolygonの型がある事を初めて知りました。
    「・・一旦PDAnnot変数にNothingを入れておくと安定・・」は視点を変えたやり方で嬉しいです。
    この手の情報はネットでもあまり扱ってなかったので助かります。

    現在は待ち作業が一杯一杯なので時間が出来ましたら、何らかの形で反映させたいと思います。
    情報提供、ありがとうございます。

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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

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