AcroExch.PDPage: CreatePageHilite メソッド

TOP > AcroExch.PDPage > CreatePageHilite      [...]


説明

1文字単位の情報とそのリストをHiliteListオブジェクト情報からの範囲に従って、1ページのテキスト選択であるAcroPDTextSelectオブジェクトを作成する。

CreateWordHiliteメソッドとの違いはCreateWordHiliteは単語、又は隣接した文字列単位で扱う事。

※この説明では理解出来ないと思うのでCreateWordHiliteメソッドのサンプルも見て頂きたい。

 

形式

LPDISPATCH CreatePageHilite(LPDISPATCH iAcroHiliteList);

 

引数

  1. 第1引数(LPDISPATCH iAcroHiliteList) :
    HiliteListオブジェクトは事前に範囲をAddメソッドで作成しておく。

 

戻り値

  • Null以外 : 成功
  • Null : 失敗

 

動作するバージョン

Version Adobe
Acrobat
備考
4
-
Acrobat 4.0 ※Windows 98SE + Excel 2000
5
-

Acrobat 5.0.5
6
-

Acrobat 6.0.3 Pro
7
NO
Acrobat 7.1.4 Pro
8
OK
NO
Acrobat 8.1.2 Pro
Acrobat 8.2.3 Pro
9
-
Acrobat 9.3.3 Extended
10
-
Acrobat X (10.1.8) Extended
11
-
Acrobat XI (11.0.04) Extended
  • OK = 動作する。
  • NO = 動作しない。 戻り値が0を返す。
  • - = 未確認。
  1. CreatePageHiliteメソッドを実行するには、その前にHiliteListオブジェクトのAddメソッドが実行出来ないと駄目です。
    よって、Acrobat v7.1.4 と Acrobat v8.2.3 では使えません。
    但し、Acrobat v8.1.2 では使えます。現在、この環境(Acrobat v8.1.2)は無いので再テストはしていません。

 






サンプル:Excel のVBA

 

説明: 文字列を検索し、見つかったページの最初の21文字めから100文字目の内容をテキスト選択状態で画面表示する。

  • F8キーでステップ実行しながら動作確認する。
  • 事前に参照設定をする。
  • テストする時は出来るだけテキストを沢山含んだページを対象にする。

 

Sub AcroExch_PDPage_CreatePageHilite()

    '検索文字列
    Const KensakuText As String = "agreement"
    
    Dim objAcroApp            As New Acrobat.AcroApp
    Dim objAcroHiliteList     As New Acrobat.AcroHiliteList
    Dim objAcroAVDoc        As New Acrobat.AcroAVDoc
    Dim objAcroPDPage       As Acrobat.AcroPDPage
    Dim objAcroPDTextSelect As Acrobat.AcroPDTextSelect
    Dim objAcroAVPageView   As Acrobat.AcroAVPageView
    Dim objAcroRect           As Acrobat.AcroRect
    Dim lRet                      As Long
    Dim lCnt                     As Long
    Dim j                         As Long
    Dim strText               As String
    
    'PDFドキュメントを開いて表示する。
    lRet = objAcroAVDoc.Open("E:¥Test01.pdf", "")
    'PDFドキュメントの先頭ページから文字列検索する。
    ' 第2引数:大文字小文字の区別無し
    ' 第3引数:単語単位の検索無し
    ' 第4引数:最初のページから検索する
    lRet = objAcroAVDoc.FindText(KensakuText, False, False, True)
    If lRet = False Then
        '検索出来なかった
        Debug.Print "Not Found =(" & KensakuText & ")"
        GoTo Skip:
    End If
    'ハイライトリストを作る。※「テキストのハイライト」では無い
    lRet = objAcroHiliteList.Add(20, 100)
    
    '検索して見つかったページのAVPageViewオブジェクトを作成
    Set objAcroAVPageView = objAcroAVDoc.GetAVPageView()
    '検索して見つかったページのPDPageオブジェクトを作成
    Set objAcroPDPage = objAcroAVPageView.GetPage()
    '1文字単位で文字をHiliteListの範囲に従って
    'PDTextSelectオブジェクトを作成する。
    Set objAcroPDTextSelect = _
        objAcroPDPage.CreatePageHilite(objAcroHiliteList)
    'AcroPDTextSelectオブジェクトに従って、
    '該当PDFページを選択状態にする。
    lRet = objAcroAVDoc.SetTextSelection(objAcroPDTextSelect)
    
    '抽出した文字列の数(Index)を取得する
    lCnt = objAcroPDTextSelect.GetNumText() - 1
    strText = ""
    For j = 0 To lCnt
        Debug.Print objAcroPDTextSelect.GetText(j)
        '単語単位で抽出する
        strText = strText & objAcroPDTextSelect.GetText(j)
    Next j
    Debug.Print ""
    Debug.Print strText
    Debug.Print ""
    
    '選択状態になっている四方範囲(AcroRect)を取得する。
    Set objAcroRect = objAcroPDTextSelect.GetBoundingRect
    With objAcroRect
        Debug.Print "Rect.Top=" & .Top
        Debug.Print "Rect.bottom=" & .bottom
        Debug.Print "Rect.Left=" & .Left
        Debug.Print "Rect.Right=" & .Right
    End With

    Debug.Print ""
Skip:
    'PDFファイルを保存しないで閉じる
    lRet = objAcroAVDoc.Close(1)

    'Acrobatを閉じる
    lRet = objAcroApp.Hide      '(注1)
    lRet = objAcroApp.Exit      '(注1)

    'オブジェクトを強制解放する
    Set objAcroHiliteList = Nothing
    Set objAcroPDPage = Nothing
    Set objAcroPDTextSelect = Nothing
    Set objAcroAVPageView = Nothing
    Set objAcroRect = Nothing
    Set objAcroAVDoc = Nothing

End Sub

 

実行結果

※以下はExcelのイミディエイト画面の内容

Incorporated.
All
rights
reserved.
Adobe
R
Acrobat
R
SDK
8.0
Developing
Applications
Using
Interapplication

Incorporated. All rights reserved.
AdobeR AcrobatR SDK 8.0 Developing Applications Using Interapplication

Rect.Top=751
Rect.bottom=724
Rect.Left=36
Rect.Right=309

 

サンプルの内容、及び結果の解説

  • Acrobat、又はAcrobat Readerで文字列を選択状態にしてみると分かるが、単語や隣接する文字列の途中から選択状態にする事は出来ない。必ず、単語や隣接する文字列全体が選択状態になる。よってHiliteListオブジェクトで指定した範囲が完全に実行される訳ではない。何文字がオーバーする。HiliteListオブジェクトは100文字を指定しているが、選択状態になっている文字数は104。
  • PDTextSelectオブジェクトのGetNumTextメソッドはCreatePageHiliteメソッドの影響は得ないで単語単位の件数を出す。
  • AcroRect情報はそこを選択すると画面の様になる。
  • 以下は実行中のテキスト選択中の画面。
    CreatePageHilite メソッド : テキスト選択状態

 

補足

  • F8キーでステップ実行し、各メソッドによりどのような動きをするかよく観察すること。
  • (注1)はテスト用のロジック。

 

動作確認環境

  • Windows98SE( + WindowsUpdate)
    + Acrobat 4.0 + Office 2000
  • WindowsXP Pro( + SP3 + WindowsUpdate)
    + Acrobat 5.0.5 + Office 2003( + SP3)
  • WindowsXP Pro( + SP3 + WindowsUpdate)
    + Acrobat 6.0.3 Pro + Office 2003( + SP3)
  • WindowsXP Pro( + SP3 + WindowsUpdate)
    + Acrobat 7.1.4 Pro + Office 2003( + SP3)
  • WindowsXP Pro( + SP3 + WindowsUpdate)
    + Acrobat 8.1.2 Pro + Office 2003( + SP3)  *
  • WindowsXP Pro( + SP3 + WindowsUpdate)
    + Acrobat 8.2.3 Pro + Office 2003( + SP3)
  • WindowsXP Pro( + SP3 + WindowsUpdate)
    + Acrobat 9.3.3 Extended + Office 2003( + SP3)

 

Adobe Web 解説 URL(英語) v9.1

 

戻る

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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

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