一覧
PDAnnot オブジェクトは注釈の作成や変更、情報の取得を目的としたオブジェクトです。
PDPage オブジェクトとも密接な連携を必要とするオブジェクトです。
このPDAnnot オブジェクトを理解しないとPDPage オブジェクトが使えません。
メソッド | 解説 |
---|---|
GetColor | 注釈の色(カラー番号)を得ます。 |
GetContents | テキスト注釈のコンテンツ(テキスト)を得ます。 |
GetDate | 注釈の日付(年月日時分秒+ミリ秒)を得ます。 |
GetRect | PDFページ上のテキスト注釈、又はPopup注釈の長方形位置(Top.Bottom,Left,Right)を得ます。 |
GetSubtype | 注釈のタイプを得ます。タイプは Text , Popup , Link , Highlightの4種類です。 |
GetTitle | 注釈の作成者を得る。注)タイトルでは無い。 |
IsEqual | PDFファイル上の注釈が別の注釈と等しいかをチェックする。 |
IsOpen | PDFファイル上のテキスト注釈がドキュメント上で開いているかチェックする。 ※但し、GetSubtypeメソッドの結果がPopupの時だけ。 |
IsValid | PDFファイル上の注釈をチェックする。 |
Perform | PDFファイル上のリンク注釈の動作を実行します。 つまりリンク先に移動します。 |
SetColor | PDFファイル上の注釈の色を設定します。色はカラー番号で指定します。 |
SetContents | PDFファイル上のテキスト注釈のテキスト(=コンテンツ)をセットします。 |
SetDate | PDFファイル上の注釈の日付をセット又は変更します。 |
SetOpen | PDFファイル上のテキスト注釈を開いたり、閉じた状態に設定する。 |
SetRect | 注釈のGetSubtypeが"Text"の時は注釈アイコンのサイズを設定(変更)します。 注釈のGetSubtypeが"Popup"の時はテキスト編集のサイズを設定(変更)します。 注釈のGetSubtypeが"Link"の時は何も変化ありません。 よって、注釈のGetSubtypeが"Popup"の時のみ使用します。 注釈のGetSubtypeが"Highlight"の時の動作は未確認。 |
SetTitle | PDFファイル上のテキスト注釈の作成者を設定します。 注)タイトルでは無い。 |
注意
- SDKではテキスト注釈のテキスト部分をコンテンツと言っていますが、基本的にテキストと思っても構いません。
< TOPへ >
こんばんわ^^
sun eternityの管理人暗黒の鬼神です
コメントから着ました
コチラのブログに招待して
いただいて感激です^^
Javaのオブジェクト指向
に関しては”まったくの無知です”
ん~JAVAはオブジェクト
Cはポイントがむずいです・・・
(単に俺の能力がないだけかも・・・)
これからもちょくちょく
顔出すんで
よろしくお願いしますね^^
ここはJavaの解説は全くしていません。基本はExcel VBAです。
ココはAcrobat&PDFをExcel VBAでプログラミング操作する為の技術リファレンス的なサイトです。オブジェクト連携がチョットややこしいですが、そこを優しく解説しています。
ちなみに、このようなサイトは海外でもネット上では存在しません。JavaScriptでの解説は存在しますが、すこし敷居が高い?かも。
既に200頁を越えた内容ですが、それでもまだ半分ぐらいしか出来ていない状態です。更新すればする程、やらなければいけない分野が出てきてしまいます。
今年には全体が出来る事を願っていますが、多分無理だろうな~。(汗
初めて聞く指向でよくわからなかったので
PDAnnot でためしにくぐってみました
1 位 に でてきたよ!
というかVBAはなんとなーくわかるけど
Acrobat&PDFとは?いったい?
くぐっても英語ページやビデオカードやら
が出てきました
型がセット・・・
うーん・・・
Cの自分にはまだまださっぱりです
↑名前覧をタイトルと勘違いしちゃったw
Acrobat Reader をExcelからコントロール操作する、と思っても構いません。
なお「ぐぐっ」てもこのサイトがほとんど1位です。何度も書きますがこの手の技術情報(=[Excel] VBAからOLE AutomationでAcrobat又はAcrobat Readerを操作する)は世界のネット上でも、このサイトだけです。※Adobe社サイトの情報(=英語)は別です。
※2つだけですが英語サイトで似たサイトがあります。そこはサンプル集、又はQ&Aだけのサイトです。
でも、この情報を必要としている人が少数エンジニアですがいる事は確かです。内容はAdobe社の正規のSDKを元に作成しています。ただ、このSDKはExcel VBAを意識した内容では無いし、説明が余りにも簡単、かつ膨大なので理解出来ない部分が多いのです。SDKの基本はJavaを意識した内容みたいです。
それでこのサイトでは、その不明瞭な部分を理解しやすいVBAを使って、詳細に解説する為に立ち上げました。自分自身でも未だに英語(=SDK)内容が理解出来ない部分が多々有ります。注)英語は中学生程度の学力。w
このサイトの情報はフリーソフトなどと違ってプログラム・エンジニア向けなので、5年、10年経っても使える内容を含んでいる事です。そうゆう意味で結構力を入れています。
はぁ~
ほんとすばらしいですね
ほんと他のページ探してもないです
自分はC中心なのでCの記事は
たくさんみつかるのですが
この記事はほんと唯一のようですね
新しい技術・・・というか
少ない情報下の中で記事(リファレンス)
するなんて早々できることじゃありません
でもAdobe Acrobatにはあんまり詳しくありません(汗)
インターネットのページの回覧を助けて
るんだろうな~ぐらいしか知りません
それではっ失礼しました
>新しい技術・・・というか
イエイエ、技術的には結構古い(1996~)です。
ただ、PCの処理能力(CPU)を必要だったので昔は敬遠しているエンジニアが多かったんです。※NORITOもその一人。
でも、今はPCの処理能力が上がったので、十分適用できるようになりました。
しかしJavaとか、WEB等の新しい技術に目が行って、このような古い技術(=OLE)を知らない人が多いみたいです。
とにかく、少数エンジニア向けサイトですが、いずれかは内容をもう少し工夫して、アクセス数を平均1000件/日にはしたいな~と思っています。(欲
その為にも、あと少なくても100頁は必要かな?(汗
はじめまして
既存のPDFに特定の文字列を発見したらそこに外部リンクを設定できるようなマクロを組もうとおもっています。
とりあえずできるかどうか確かめるということでAcrobat X Proの体験版でこちらのサイトをお手本にいろいろ試してまして
特定の文字列を検索してそれを選択状態にすることはできたのですが、それに対して外部リンクを設定することができなくて・・・。
Acrobatの操作で言えば
文字列を選択状態にする→右クリック→リンクを作成→webページを開くを選択して次にボタン押下→URLを入力
という操作をしたいのですがこれは可能でしょうか?
H2Oさん。初めまして。
未確認情報ですが、取り急ぎ返答させて頂きます。
Acrobat X はまだ試していないので、機能の追加や削除等は未確認です。
しかし過去の経緯から予測するとAcrobat v9.0と同じと推測しています。
それならば、H2Oさんが望む機能は当サイトで紹介しているOLEで出来ないと思われます。
目的のテキストを選択状態には、ある程度は出来ます(※バージョン等により不安定)が、それに外部リンクやハイライト等の処理はOLEには機能がありません。
唯一メニューコマンドを実行するOLEメソッドは有ります。その時に該当するメニューに付いている固有の名前を指定する必要が有ります。しかしAdobe社は正確な情報公開を何年も怠っています。
よって残念ですが、当サイトの情報だけでは不可能となります。
但し、当サイトで未開拓のAcrobat JavaScriptを調査する価値は有るかもしれません。
なぜならば、こちらは常に微々たるですがバージュンアップしている気配を感じるからです。(勘
これに関してはH2Oさんに調べて頂くしかありません。
過去に似たような質問を受けて3週間ほど格闘しましたが、負けました。(悲
期待した返答が出来なくて、エンジニアとして、少し心苦しいです。
返答ありがとうございます。
ちょうど海外のフォーラムでVB.NETでリンクを追加すると言う内容のやり取りがありまして、そこでJSObjectを使用しておりました。
Dim objAcroApp As New Acrobat.AcroApp
Dim objAcroPDDoc As New Acrobat.AcroPDDoc
Dim objJSO As Object
Dim annot As Object
Dim strPDFPath As String 'PDFファイルパス
Dim linkRect(3) As Long 'リンク設定範囲
'Acrobatを起動する。
objAcroApp.Show
'ファイルを開く
objAcroPDDoc.Open strPDFPath
'JSOObjectを得る
Set objJSO = objAcroPDDoc.GetJSObject
・・・中略(文字列検索してRect情報を取得する処理)・・・
Set annot = objJSO.addLink(iPage, linkRect)
annot.setAction ("this.getURL('" & LINK(i) & "');")
と言うような感じで何とか外部リンクを設定することができました。
setActionのパラメータにはJavaScript actionを設定するとあり、JavaScriptAPIとは別物なんだろうな?と情報を探すとFlashで使う言語でActionScriptというのがありまして、これ、もしくはこれに近いのかな?と、まだまだ勉強することがいっぱいのようですが・・・。
とりあえず道は見えてきた気がします。本当にありがとうございました。
H2Oさんへ。
逆に教えて頂きました。(汗
出来れば、そのサイトURLも教えて頂けれる嬉しいです。
※やはり、GetJSObjectメソッドが鍵でしたか。
※これに関する情報が無くて困ってます。
該当フォーラムのURLは
http://www.justskins.com/forums/adding-links-in-vb-116624.html
です。
まだぜんぜん理解できていないのですがPDDoc.GetJSObjectによって
http://kb2.adobe.com/jp/cps/511/511719.html
↑こちらで入手したJavaScript API リファレンスのDocオブジェクトに
相当するものが得られるのではないかな?と想像してます。
addLinkメソッドを使ってLinkオブジェクト(ソースで言うannot)を
取得してsetActionメソッドを実行してますし。
GetJSObjectで得られたオブジェクトで
MsgBox objJSO.numPages
としてみたところPDFファイルのページ数を得ることができました。
とりあえずリファレンスを熟読していろいろ試してみようかとおもってます。
H2Oさんへ。
ありがとうございます。
>http://kb2.adobe.com/jp/cps/511/511719.html
このバージョンの日本語版があったとは・・。
なぜ見つからなかったのか、不思議です。
>http://www.justskins.com/forums/
上記フォーラムの存在は初めて知りました。
イロイロと海外のサイトも見ていますが、GetJSObjectに関する情報は非常に少なく、再現性もマレです。
※Adobe社もこれに関する詳細なリファレンスが無料公開されてない。
JavaScript API リファレンスに書かれているからと言って、出来るとは限らないのが実際の大きな壁です。
たぶん、引数の書き方の問題ではないかと前々からは予想していましたが。
今回の件から、少しは前進できる予感がしました。
それともう一つお願いがあります。
>・・中略(文字列検索してRect情報を取得する処理)
に関するサンプルを頂けないでしょうか?
Acrobatのバージョンの問題かは不明ですが、検索して、その「Rect情報を取得」がうまく出来なく、前回(1年前)は挫折しました。
何か自分が勘違い?していると思っています。(恥
とにかく、「GetJSObjectに関する情報」は有難いです。
今は多忙なので後日、詳細を再確認させて頂きます。(嬉
別件でいろいろ立て込んでいたため返事が遅くなりましてすいません。
Rect情報を取得する処理ですが、こちらも不完全なものでしかないです。
長くなりますがご了承ください。
処理の流れとしては
1).ドキュメントの総ページ数を取得する。
2).1ページ目から順に3.~9.をループ処理
3).処理中のページの全テキストのPDTextSelectオブジェクトを得る
4).PDTextSelectからテキストを順に取得して
「全テキストを結合した文字列」と
「その文字列のn番目の文字はPDTextSelectの
何番目のテキストであるかをセットした配列」を作成
5)InStr関数で検索文字列があるかをチェック。
見つかる限り6)~9)の処理を行う
6).4)で作成した配列を使ってInStrでみつかった文字列の先頭と末端が
PDTextSelectの何番目のテキストであるかを得る
7).6)で得た位置の情報から該当位置のみのハイライトリストオブジェクトを
設定しPDTextSelectオブジェクトを得る
8).GetBoundingRectメソッドでRect情報を得る
9).JSOObjectを利用して外部リンクを設定する。
という感じで行っています。
で、問題がいろいろ出てくるのですが
a).6)で正しいPDTextSelectが得られない場合がある。
例えば3)で得られた処理中ページのPDTextSelectに含まれるテキストの
総数が500であり、文字列検索した結果490番目の位置に目的の文字列が
見つかったためHiliteList.add(490,1)として該当部分の
PDTextSelectを得ようとしたら、ずれた位置のPDTextSelectが得られたり
1つと指定しているのにGetNumTextをしてみたら2個のテキストが得られたり
PDTextSelectがNothingであったりと正確に指定したとおり得ることが
できないことがあります。
これのはっきりした原因はよくわからないのです。
とりあえず応急処置として7)で得られたPDTextSelectの先頭の文字列が
本来得たかった文字列と一致するかチェックし、一致しなければ
一つ前の位置で7)の処理を再度行い一致するまで補正し続ける
というやり方で正しい位置が得られるようにしました。
(Nothingであった場合にも同様)
b).a)テキストの区切りがHiliteListの設定によって変わる場合がある。
a)の修正中にあったのですが半角スペースや改行がある場合、
PDTextSelectのとり方によってテキストの区切られ方が
変わってくることがあります。
(もしかしたらそれ以外にも変わる要因があるかもしれません)
そのためa)のチェックで一致するものがないという状況に
なることがあります。
これも応急処置で半角スペースと改行を削除した上で
一致チェックを行うことにしました。
c).半角英数の後に(や.などが続くとそこも含めて1テキストと
解釈されるため厳密に得たいと思っている文字列以上の
範囲のRect情報しか得られない。
これはこのマクロでやろうとしているPDFでは影響は
無視できるであろう、として対策は考えませんでした。
逆にハイフンは区切られてしまうので検索文字列にハイフンが含まれると
複数テキストにまたがってしまうため、4)~6)でいちいち文字列を
全結合してInStrで検索、何番目から何番目のテキストを得るという
めんどくさい処理にしています。
d).ずれが大きい場合検索文字列が連続していると補正が正しく効かなくなる。
結局前回発見した位置から後ろにずらしてチェックするような補正にすれば
いいのですが毎回補正処理を何回もする羽目になることになり、
また処理のほとんどをJSOObject経由で行うように作り直したため
実際に修正しないまま終わりました。
以下、ソースです。
無駄なことをしている部分もあると思いますがお察しください・・・。
001 Option Explicit
002
003 Dim i As Long
004 Dim j As Long
005 Dim IPage As Long
006 Dim lCnt As Long
007 Dim lPos As Long
008 Dim lStart As Long
009 Dim lEnd As Long
010 Dim lCntSub As Long
011 Dim lLen As Long
012 Dim strText As String
013 Dim strSubText As String
014
015
016 Sub implantLink()
017
018 On Error GoTo ErrorHandler
019
020 ' Acrobatオブジェクトの定義&作成
021 Dim objAcroApp As New Acrobat.AcroApp
022 Dim objAcroPDDoc As New Acrobat.AcroPDDoc
023 Dim objAcroHiliteList As New Acrobat.AcroHiliteList
024
025 Dim objAcroAVDoc As Acrobat.AcroAVDoc
026 Dim objAcroPDPage As Acrobat.AcroPDPage
027 Dim objAcroPDTextSelect As Acrobat.AcroPDTextSelect
028 Dim objAcroPDTextSelectCheck As Acrobat.AcroPDTextSelect
029 Dim objAcroRect As Acrobat.AcroRect
030 Dim objJSO As Object
031 Dim annot As Object
032
033 Dim lRet As Long '戻り値
034 Dim lPages As Long '全頁数
035
036
037 Dim lRevise As Long '補正位置
038 Dim lArray() As Long '文字位置情報
039 Dim strStr() As String '文字情報
040 Dim strStr2() As String '文字情報
041 Dim strPDFPath As String 'PDFファイルパス
042 Dim linkRect(3) As Long 'リンク設定範囲
043 Dim SEARCH_WORD(1) As String '検索文字列
044 Dim LINK(1) As String 'URL文字列
045
046 strPDFPath = "xxx.pdf"
047
048 SEARCH_WORD(0) = "検索文字列1"
049 SEARCH_WORD(1) = "検索文字列2"
050 LINK(0) = "http://url1"
051 LINK(1) = "http://url2"
052
053 'Acrobatを起動する。
054 objAcroApp.Show
055 'ファイルを開く
056 objAcroPDDoc.Open strPDFPath
057 'JSOObjectを得る
058 Set objJSO = objAcroPDDoc.GetJSObject
059 '総頁数を取得する
060 lPages = objAcroPDDoc.GetNumPages
061 'PDFを画面表示する
062 Set objAcroAVDoc = objAcroPDDoc.OpenAVDoc("外部リンク埋込PDF")
063 '全テキストのハイライトリストを作成する
064 lRet = objAcroHiliteList.Add(0, 32767)
065
066 '頁ごとに処理
067 For IPage = 0 To lPages - 1
068 '現頁のPDPageオブジェクトを作成する
069 Set objAcroPDPage = objAcroPDDoc.AcquirePage(IPage)
070 'ハイライトリスト(objAcroHiliteList)からページ単位の
071 'テキスト選択のPDTextSelectオブジェクトを作成する
072 Set objAcroPDTextSelect = _
073 objAcroPDPage.CreateWordHilite(objAcroHiliteList)
074 '文字位置情報を取得
075 lArray = createarray(objAcroPDTextSelect)
076 '抽出した文字列の数(Index)を取得する
077 lCnt = objAcroPDTextSelect.GetNumText()
078 '文字列を結合
079 strText = ""
080 For i = 1 To lCnt
081 strText = strText & objAcroPDTextSelect.GetText(i - 1)
082 ReDim Preserve strStr(i)
083 strStr(i) = objAcroPDTextSelect.GetText(i - 1)
084 Next i
085 '検索文字列ごとに処理
086 For i = 0 To UBound(SEARCH_WORD)
087 '補正値の初期化
088 lRevise = 0
089 '検索開始位置の初期化
090 lPos = 1
091 Do
092 lRet = InStr(lPos, strText, SEARCH_WORD(i))
093 If lRet = 0 Then
094 GoTo NotFound:
095 End If
096 lPos = lRet + Len(SEARCH_WORD(i))
097 strSubText = Mid(strText, lRet, Len(SEARCH_WORD(i)))
098 '開始位置を得る
099 lStart = lArray(lRet)
100 '終了位置を得る
101 lEnd = lArray(lRet + Len(SEARCH_WORD(i)) - 1)
102 Revise:
103 '該当箇所のハイライトリストを作成する
104 Dim objAcroHiliteListCheck As New Acrobat.AcroHiliteList
105 lRet = objAcroHiliteListCheck.Add(lStart - 1 - lRevise, 1 + lEnd - lStart)
106 'ハイライトリスト(objAcroHiliteListCheck)から
107 'テキスト選択のPDTextSelectオブジェクトを作成する
108 Set objAcroPDTextSelectCheck = _
109 objAcroPDPage.CreateWordHilite(objAcroHiliteListCheck)
110 'TextSelectが取得できなかったら補正
111 If objAcroPDTextSelectCheck Is Nothing Then
112 lRevise = lRevise + 1
113 'ハイライトリストのクリア
114 Set objAcroHiliteListCheck = Nothing
115 GoTo Revise:
116 End If
117 '抽出した文字列の数(Index)を取得する
118 lCntSub = objAcroPDTextSelectCheck.GetNumText()
119 '文字列を結合
120 strSubText = ""
121 For j = 1 To lCntSub
122 strSubText = strSubText & objAcroPDTextSelectCheck.GetText(j - 1)
123 ReDim Preserve strStr2(j)
124 strStr2(j) = objAcroPDTextSelectCheck.GetText(j - 1)
125 Next j
126 'スペースおよび改行コードを除いて比較
127 '何がゴミとしてくっついてくるかわからないので修正がいるかも
128 ' If RepCRLF(Trim(strStr2(1)), "") RepCRLF(Trim(strStr(lStart)), "") Then
129 If RepCRLF(Trim(strStr2(1)), "") Then
130 lRevise = lRevise + 1
131 'ハイライトリストのクリア
132 Set objAcroHiliteListCheck = Nothing
133 GoTo Revise:
134 End If
135 'Rect情報を取得する
136 Set objAcroRect = objAcroPDTextSelectCheck.GetBoundingRect
137 'テキストを選択状態にする
138 lRet = objAcroAVDoc.SetTextSelection(objAcroPDTextSelectCheck)
139 'テキスト選択状態を見やすい位置表示にする
140 lRet = objAcroAVDoc.ShowTextSelect()
141 '外部リンクを追加する
142 linkRect(0) = objAcroRect.Left
143 linkRect(1) = objAcroRect.Top
144 linkRect(2) = objAcroRect.Right
145 linkRect(3) = objAcroRect.bottom
146 Set annot = objJSO.addLink(IPage, linkRect)
147 annot.setAction ("this.getURL('" & LINK(i) & "');")
148 'テキスト選択状態の破棄
149 lRet = objAcroPDTextSelectCheck.Destroy
150 'ハイライトリストのクリア
151 Set objAcroHiliteListCheck = Nothing
152 Loop Until lPos > Len(strText)
153 NotFound:
154 Next i
155 Next IPage
156
157 'PDFファイルを別名で保存
158 lRet = objAcroPDDoc.Save _
159 (PDSaveFull + PDSaveLinearized + _
160 PDSaveCollectGarbage, _
161 strPDFPath & "_")
162
163 'PDFファイルを閉じる
164 objAcroPDDoc.Close
165 'Acrobatを閉じる
166 lRet = objAcroApp.Hide
167 lRet = objAcroApp.Exit
168
169 'オブジェクトを強制解放する
170 Set objAcroPDTextSelectCheck = Nothing
171 Set objAcroPDTextSelect = Nothing
172 Set objAcroPDPage = Nothing
173 Set objAcroPDDoc = Nothing
174 Set objAcroAVDoc = Nothing
175 Set objAcroApp = Nothing
176
177 MsgBox "処理が完了しました"
178
179 Exit Sub
180
181 ErrorHandler:
182 MsgBox "エラーが発生しました"
183 End Sub
184
185 Function createarray(objAcroPDTextSelect As AcroPDTextSelect) As Long()
186 Dim lCnt As Long
187 Dim lSumLen As Long
188 Dim lRet() As Long
189
190 lSumLen = 0
191 '抽出した文字列の数(Index)を取得する
192 lCnt = objAcroPDTextSelect.GetNumText()
193 For i = 1 To lCnt
194 strText = objAcroPDTextSelect.GetText(i - 1)
195 lLen = Len(strText)
196 For j = 1 To lLen
197 ReDim Preserve lRet(j + lSumLen)
198 lRet(j + lSumLen) = i
199 Next j
200 lSumLen = lSumLen + lLen
201 Next i
202 createarray = lRet
203 End Function
204
205 Function RepCRLF(s As String, rep As String) As String
206
207 Dim a As String
208 Dim i As Long
209 Dim j As Long
210
211 a = s
212 j = Len(rep)
213 i = 1 - j
214 Do
215 i = InStr(i + j, a, vbCrLf)
216 If i > 0 Then a = Left(a, i - 1) & rep & Right(a, Len(a) - i - 1)
217 Loop Until i = 0
218
219 RepCRLF = a
220
221 End Function
H2Oさんへ。
お返事、ありがたいです。
※コメント本文は段付き状態ですが表示時に前のスペースが強制的に取られます。(汗
>・・これのはっきりした原因はよくわからないのです。
その出来ない原因は全テキスト抽出した時の並びが見た目と違うからです。
通常は上から順番(ヘッダー+本文+フッター)にテキストが抽出されますが、
PDFページの作り方?によっては、フッター+ヘッダー+本文の順で
抽出されます。※過去の記憶
だからRectでの位置がズレる。
この現象に置ける規則性を見つけることが出来ませんでした。
もう少し時間が出来たら、行方不明になった1年以上も前のロジックを探して、H2Oさんのロジックを付け足して、再度作ってみたいと思います。
貴重なお時間と情報の提供をお礼申し上げます。m(_._)m
はじめまして
私も下記問題で悩んでいます。
ズーム値とずれ量が線形の相関をもっているところまではわかりましたが、
h方向とv方向のどちらにずれるかが、ファイルによってまちまちで困ります。
>だからRectでの位置がズレる。
>この現象に置ける規則性を見つけることが出来ませんでした。
⇒その後、何か解決策はみつかりましたでしょうか?
何かアドバイスをいただけると助かります。
kopa さん。
はじめまして。
残念ですが、この問題の進展は有りません。
PDFファイルの内部構造を読めば判るかもしれませんが、データ部分はバイナリーになっている事が多いので、これも何か特殊なツールが必要になります。
現在ではH2Oさんのコメントが一番ベストに近いものと考えています。
こちらのサイトには大変お世話になっています。
お礼がてら、私の方で気づいたことを報告します。
GetSubtypeが"FreeText"だと、テキストボックスになるようです。
弊社ではPDFにテキストボックスを多用しており、その内容をVBAで読みたかったのですが、なんとか成功しました。
すいまーひろ さん
はじめまして
情報提供ありがとうございます。
バージョンによってタイプの追加があったのかもしれません。
後日、検証させて頂きます。