TOP > AcroExch.PDTextSelect > GetText [...]
説明
テキストが入った配列からインデックス指定でテキストを得ます。
テキストが入った配列はPDTextSelectオブジェクトです。
形式
BSTR GetText(long nTextIndex);
引数
- 第1引数(long nTextIndex) :
テキストが入った配列のインデックスを指定する。
最初は0。
戻り値
- テキスト。
動作するバージョン
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
説明:PDFファイルの全テキストをテキストファイルに出力する。
- F8キーでステップ実行しながら動作確認する。
- 事前に参照設定をする。
- 以下のサンプルはGetNumTextメソッドのサンプルと同じです。
001 Sub AcroExch_PDTextSelect_GetText()
002
003 Debug.Print "AcroExch_PDTextSelect_GetText:" & Now
004 Dim objAcroApp As New Acrobat.AcroApp
005 Dim objAcroHiliteList As New Acrobat.AcroHiliteList
006 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
007 Dim objAcroPDDoc As Acrobat.AcroPDDoc
008 Dim objAcroPDPage As Acrobat.AcroPDPage
009 Dim objAcroPDTextSelect As Acrobat.AcroPDTextSelect
010 Dim objAcroAVPageView As Acrobat.AcroAVPageView
011 Dim lRet As Long
012 Dim lCnt As Long
013 Dim lPageCnt As Long
014 Dim i As Long
015 Dim j As Long
016 Dim strText As String
017 Dim lFileNo As Long
018 Dim lOutCnt As Long
019
020 'Acrobatを起動表示する
021 lRet = objAcroApp.Show '(TEST用)
022 'PDFドキュメントを開いて表示する。
023 lRet = objAcroAVDoc.Open("E:\Test01.pdf", "")
024 Set objAcroAVPageView = objAcroAVDoc.GetAVPageView()
025 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc()
026 lPageCnt = objAcroPDDoc.GetNumPages - 1
027 Debug.Print "全頁数 = " & (lPageCnt + 1)
028 'ハイライトリストを作る。※「テキストのハイライト」では無い
029 lRet = objAcroHiliteList.Add(0, 32767)
030
031 '空きのファイル番号を取得
032 lFileNo = FreeFile
033 'テキストファイルをOPEN
034 Open "C:\List.txt" For Output As #lFileNo
035 lOutCnt = 0
036
037 For i = 0 To lPageCnt
038 lRet = objAcroAVPageView.Goto(i)
039 Set objAcroPDPage = objAcroAVPageView.GetPage()
040 '単語、又は隣接する文字列単位でHiliteListの範囲に従って
041 'PDTextSelectオブジェクトを作成する。
042 Set objAcroPDTextSelect = _
043 objAcroPDPage.CreateWordHilite(objAcroHiliteList)
044 'AcroPDTextSelectオブジェクトに従って、
045 '該当PDFページを選択状態にする。
046 lRet = objAcroAVDoc.SetTextSelection _
047 (objAcroPDTextSelect)
048 '選択状態した単語、又は隣接する文字列の数を取得する
049 lCnt = objAcroPDTextSelect.GetNumText() - 1
050 strText = ""
051 For j = 0 To lCnt
052 'Debug.Print objAcroPDTextSelect.GetText(j)
053 '単語、又は隣接する文字列単位で抽出する
054 '※空白文字は前の単語、又は隣接する文字列の最後となる
055 strText = strText & objAcroPDTextSelect.GetText(j)
056 If InStr(strText, vbCrLf) > 0 Then
057 '改行コードを含んだ単語
058 strText = Replace(strText, vbCrLf, "")
059 'ファイルに出力する
060 Print #lFileNo, strText
061 strText = ""
062 lOutCnt = lOutCnt + 1
063 End If
064 Next j
065 Next i
066
067 Debug.Print "出力行数 = " & lOutCnt
068 '出力テキストファイルを閉じる。
069 Close #lFileNo
070 'PDFファイルを保存しないで閉じる
071 lRet = objAcroAVDoc.Close(1)
072
073 'Acrobatを閉じる
074 lRet = objAcroApp.Hide
075 lRet = objAcroApp.Exit
076
077 'オブジェクトを強制解放する
078 Set objAcroHiliteList = Nothing
079 Set objAcroPDTextSelect = Nothing
080 Set objAcroAVPageView = Nothing
081 Set objAcroAVDoc = Nothing
082 Set objAcroPDPage = Nothing
083 Set objAcroPDDoc = Nothing
084 Set objAcroApp = Nothing
085
086 End Sub
087
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
実行結果
TEST_PDTextSelect_GetText:2008/07/31 21:47:23
全頁数 = 34
出力行数 = 956
※下記は実行途中のPDFビュアーの画面の一部です。透明テキストがページ全体選択状態になっています。

補足
- 「隣接する文字列」の意味が分からなければ、
空白又は改行を区切りとする連続する文字列と考えて下さい。 - CreateWordHiliteメソッド、CreatePageHiliteメソッド、
CreateTextSelectionメソッドも参考にして下さい。 - ファイル出力しないで、Excel上に出力してもいいです。
動作確認環境
- WindowsXP Pro(+ SP3) +
Acrobat 8.1.2 Pro + Office 2003 + MicrosoftUpdate
< 戻る >
管理人さん
参考にさせて頂いております。
このサンプルにて、PDF内の全テキストを取得できることが出来ました。
テキストを取得する際、その座標値(Rect?)も一緒に取得したいのですが、そのやり方が分からずに困っております。
GetTextにて取得したテキストにつき、ページ番号をGetPageで取得、
RectをGetBoundingRectで取得、と考えましたが、期待したRectが取れてないようです。
(PDFの左下を起点としたRectが取れると期待していました。)
もしよろしければ、解決のお手伝いをお願いいたします。
OS : Windows 7 Ent
Acrobat : Adobe Acrobat 10.0 Type Library
Tool : Excel 2013
なっかむさん はじめまして。
GetBoundingRectの結果を元に座標の計算等が出来ないとなると、他に有効と思われる方法は当サイトには無いと思われます。
指定した座標(範囲)からテキストを抽出する方法はいくつか存在しますが、期待する結果が得られるかは不明です。
1)「Poppler:pdftotext 」を利用して、指定座標内の文字列を取得
2)「Xpdf:pdftotext」を利用して、指定座標内の文字列を取得
3)「サンプル:指定範囲(座標)でページを切り取り(トリミング)し、そこからテキストを抽出」
Acrobatの「環境設定」の内容を変更して、GetBoundingRectの値を希望する内容に変更等は出来ないかと見てみましたが、それらしき設定は無いみたいです。
残念ですが、ご希望には添えないみたいです。
管理人さん
返信ありがとうございます。
Acrobat SDKだと、テキストとその座標の取得は難しそうですね。
その他のライブラリも調べておりますが、なかなか解決に至っておりません。
以上、ありがとうございました。