TOP > AcroExch.PDAnnot > GetSubtype [...]
説明
注釈のタイプを得ます。
タイプは Text , Popup , Link , Highlight の4種類です。
形式
BSTR GetSubtype();
引数
- 無し。
戻り値
- Text , Popup , Link , Highlight の文字列のどれかを返します。
動作するバージョン
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キーでステップ実行しながら動作確認する。
- 事前に参照設定をする。
注意) 以下サンプルは "Highlight" 処理が抜けています。追加で使用して下さい。
001 Sub AcroExch_PDAnnot_GetSubtype()
002
003 Debug.Print "TEST_PDAnnot_GetSubtype:" & Now
004 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
005 Dim objAcroPDDoc As Acrobat.AcroPDDoc
006 Dim objAcroPDPage As Acrobat.AcroPDPage
007 Dim objAcroPDAnnot As Acrobat.AcroPDAnnot
008 Dim lAnnotsCnt As Long '注釈数
009 Dim lTextCnt As Long '件数
010 Dim lRet As Long '戻り値
011 Dim j As Long '添え字
012 Dim lText As Long
013 Dim lPopUp As Long
014 Dim lLink As Long
015 Const CON_PAGE = 0 'ページ番号
016
017 lTextCnt = 0
018 lText = 0
019 lPopUp = 0
020 lLink = 0
021 'PDFドキュメントを開いて表示する
022 lRet = objAcroAVDoc.Open("E:¥Test01.pdf", "")
023 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc()
024 '2頁目のページ・オブジェクトを得る ★注意①
025 Set objAcroPDPage = _
026 objAcroPDDoc.AcquirePage(CON_PAGE)
027 Debug.Print "頁=" & CON_PAGE
028 'ページに存在する注釈数を得る ★注意②
029 lAnnotsCnt = objAcroPDPage.GetNumAnnots() - 1
030 Debug.Print "全注釈数=" & (lAnnotsCnt + 1)
031 For j = 0 To lAnnotsCnt
032 Set objAcroPDAnnot = objAcroPDPage.GetAnnot(j)
033 With objAcroPDAnnot
034 Debug.Print "(" & j & ")GetSubtype=" & _
035 .GetSubtype
036 Debug.Print " GetContents=" & _
037 .GetContents
038 Select Case .GetSubtype
039 Case "Text": lText = lText + 1
040 Case "Popup": lPopUp = lPopUp + 1
041 Case "Link": lLink = lLink + 1
042 Case Else: MsgBox "Program Error(" & _
043 .GetSubtype & ")"
044 End Select
045 End With
046 lTextCnt = lTextCnt + 1
047 Next j
048 Debug.Print "Text =" & lText & " 件"
049 Debug.Print "Popup =" & lPopUp & " 件"
050 Debug.Print "Link =" & lLink & " 件"
051 Debug.Print "全件数=" & lTextCnt & " 件"
052
053 'PDFファイルを保存しないで閉じる
054 lRet = objAcroAVDoc.Close(1)
055 'オブジェクトを強制解放する
056 Set objAcroAVDoc = Nothing
057 Set objAcroPDAnnot = Nothing
058 Set objAcroPDPage = Nothing
059 Set objAcroPDDoc = Nothing
060
061 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番目の注釈が表示されてない。
実行結果(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つ表示されてない。
補足
- 「★注意①」と「★注意②」の部分が動作不良を起こしている模様です。
正確に処理できません。
動作確認環境
- WindowsXP Pro(+ SP3) +
Acrobat 8.1.2 Pro + Office 2003 - Windows 10 64Bit Pro +
Acrobat XI Pro + Office 2007
< 戻る >
貴重な情報提供ありがとうございます。まだまだ実態確認の途中ですが、気づいたことを書いておきます。
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連続に化けるようです。貼り付け先がメモ帳などの場合には問題ありません。プログラミング初心者はあまり見にこない記事と思いますが一応。
のりさん。初めまして。
タイプにInkとPolygonの型がある事を初めて知りました。
「・・一旦PDAnnot変数にNothingを入れておくと安定・・」は視点を変えたやり方で嬉しいです。
この手の情報はネットでもあまり扱ってなかったので助かります。
現在は待ち作業が一杯一杯なので時間が出来ましたら、何らかの形で反映させたいと思います。
情報提供、ありがとうございます。