AcroExch.PDPage メソッド一覧

TOP > AcroExch.PDPage      [...]


一覧

PDFドキュメントの指定されたページに対しての操作等を提供するオブジェクトです。

PDDocオブジェクトからはAcquirePageメソッドで、AVPageViewオブジェクトからはGetPageメソッドで連携します。

 

<警告>

当PDPageオブジェクトのテキスト注釈に関するメソッド関連で不規則な不具合が多数発生しています。

その為、各メソッドの説明がエラーサンプル付き状態になっています。

いろいろなオブジェクト連携や、扱うPDFファイルを変えたりもしたのですが、不具合の解消には至りませんでした。

今までの中でも相当な時間を掛けましたが、解決方法(逃げ道)がいまだに見つかっていません。

Acrobat( Pro v8.1.2)本体上での手動操作には何ら問題は無いのですが、OLE操作ではうまく出来ません。

注釈機能を使っている会社等は少ないかもしれませんが、Acrobatの注釈機能は非常に優れたものです。

何とか逃げる策を考えたいと思っています。

 

メソッド 解説
AddAnnot ページに他のテキスト注釈をコピー追加します。
AddNewAnnotメソッドとの違いは同じのPDFドキュメントにある注釈を元にコピーする為に作られたメソッドです。
他のPDFドキュメントからは直接コピー追加は出来ません。
AddNewAnnot ページの指定位置にテキスト注釈を新規追加します。
同時にPDAnnotオブジェクトを作成します。
CopyToClipboard 四方範囲を指定してPDFページ上をクリップボードにコピーする。
このメソッドは32ビットのシステム上だけ利用可能です。
クリップボード上は画像イメージで保存されています。
CreatePageHilite 1文字単位の情報とそのリストをHiliteListオブジェクト情報からの範囲に従って1ページのテキスト選択であるAcroPDTextSelectオブジェクトを作成する。
CreateWordHilite 単語、又は隣接する文字列単位の情報とそのリストをHiliteListオブジェクト情報から範囲に従って1ページのテキスト選択であるAcroPDTextSelectオブジェクトを作成する。
CropPage 該当ページから指定した四隅範囲を残してページから切り取る。(=トリミングする)
Draw 頁コンテンツを指定された画面に引き込みます。(推奨しない)
DrawEx 頁コンテンツを指定された画面に引き込みます。
※これをExcel VBA上で使用するのは無理みたいです。
GetAnnot 配列で管理されている注釈オブジェクトからインデックスで指定された1つの注釈(AcroPDAnnot)オブジェクトを得ます。
GetAnnotIndex ページ指定された注釈のインデックス(頁注釈配列の中)を得ます。
GetDoc ページに関連しているAcroExch.PDDocオブジェクトを取得する。
GetNumAnnots ページに存在する注釈数の合計を返す。
注)サンプル動作不良?
GetNumber 現在の頁の頁番号を得ます。
ドキュメントにおける最初の頁はゼロ頁です。
GetRotate 現在のページに設定されている回転値を得る。
回転値は0度、90度、180度、270度の4種類のみ。
GetSize 指定されたページのサイズ(幅,高さ)をポイント(Point)オブジェクトで返します。
RemoveAnnot ページ注釈配列からインデックス指定して、該当する注釈を削除する。
SetRotate 現在のページを回転させる。
回転値は0度、90度、180度、270度の4種類のみ。

 

TOPへ

「AcroExch.PDPage メソッド一覧」への12件のフィードバック

  1. はじめまして。
    VB2005とacrobat8を使い、あるフォルダにPDFファイルをコピーしたら、天地左右3mmづつトリミングされたPDFファイルが別フォルダに作成されるというプログラムを作ろうとしています。
    トリミングはCropPageを使おうと考えているのですが、うまく動作してくれません。
    一体どこが悪いのでしょうか?
    以下ソース
    Dim objAcroApp As New Acrobat.AcroApp
    Dim objAcroAVDoc As New Acrobat.AcroAVDoc
    Dim objAcroPDDoc As New Acrobat.AcroPDDoc
    Dim AVDoc As Acrobat.CAcroAVDoc
    Dim PDDoc As Acrobat.CAcroPDDoc
    Dim pagesuu As Long
    Dim lRet As Long
    'アクロバットを起動
    lRet = objAcroApp.Show
    'PDFファイルを開いて表示する。
    lRet = objAcroAVDoc.Open("C:¥test.pdf", "")
    'PDDocを取得する
    objAcroPDDoc = objAcroAVDoc.GetPDDoc
    'ページ数を取得する
    PDDoc = objAcroAVDoc.GetPDDoc()
    pagesuu = PDDoc.GetNumPages()
    'AcroRectを作成する
    Dim pdfRect As New Acrobat.AcroRect
    pdfRect.Top = 8.504   '←8.504は3mmをポイントに直した数値
    pdfRect.Left = 8.504
    pdfRect.right = 8.504
    pdfRect.bottom = 8.504
    '頁のトリミング(天地左右-3mm)
    Dim res As Integer
    res = PDDoc.CropPages(0, pagesuu-1, 0, pdfRect)

  2. 先ほどの書き込みですが自己解決しました。
    ■変更点
    pdfRect.Top = 8.504   '←8.504は3mmをポイントに直した数値
    pdfRect.Left = 8.504
    pdfRect.right = 8.504
    pdfRect.bottom = 8.504

    '最初のページのページサイズを取得する
    Dim pdfPage As Acrobat.AcroPDPage = objAcroPDDoc.AcquirePage(0)
    Dim pdfRectTemp As Object = pdfPage.GetSize
    Dim pdfRect As New Acrobat.AcroRect
    pdfRect.Top = pdfRectTemp.y - (8.504)
    pdfRect.Left = 8.504
    pdfRect.right = pdfRectTemp.x - (8.504)
    pdfRect.bottom = 8.504
    ※配列(pdfRect)の並び順と数値を変更しました
    ご迷惑をおかけいたしました。

  3. みやさん。初めまして。
    貴重な情報、ありがとうございます。
    ここのポイントはGetSizeメソッドをうまく使った事ですね。それでpdfRectが生かされた。
    pdfRectを使ったサンプルを別途で考えていたので、参考にさせて頂くかもしれません。
    こうゆうコメントは大歓迎です。
    ※実は今日は風邪でお休みしていました。レスが遅れたのはそれが理由です。

  4. 管理人さん、はじめまして。
    いつも利用させて頂いております。m(__)m
    VBAにてPDFファイルのトリミングをおこなおうと下記の記述をしたところ
    「実行時エラー'429 ActiveXコンポーネントはオブジェクトを作成できません。」
    のエラーが出てしまいます。
    該当の箇所は、下記×の箇所になります。
    Dim ObJAcroApp As Object
    Dim ObjAcroAVDoc As Object
    Dim ObjAcroPDDocNEW As Object
    Dim ObjAcroPDDocADD As Object
    Dim objAcroRect As Object
    Dim objAcroPoint As Object
    Dim objAcroPDPage As Object
    Set ObJAcroApp = CreateObject("AcroExch.App")
    Set ObjAcroAVDoc = CreateObject("AcroExch.AVDoc")
    Set ObjAcroPDDocNEW = CreateObject("AcroExch.PDDoc")
    Set ObjAcroPDDocADD = CreateObject("AcroExch.PDDoc")
    Set objAcroRect = CreateObject("AcroExch.Rect")
    Set objAcroPoint = CreateObject("AcroExch.Point")
    × Set objAcroPDPage = CreateObject("AcroExch.PDPage")
    多数のPCにて使用を想定しているため、この記述をしております。

    OS:Windows7 SP1 64BIT
    Acrobat Ver:Acrobat Pro DC ver2015.006
    ツール:Excel2010

    お忙しいところ大変お手数ですが、ご教授頂ければ幸いです。
    よろしくお願い致します。

  5. kage さん
    はじめまして。

    objAcroPDPage、つまりPDPageオブジェクトは残念ですが CreateObject によって作成するものでは有りません。
    オブジェクト連携図を御覧ください。PDDoc又はAVPageViewオブジェクトを作成し、そこから連携して作成されるオブジェクトです。(分かりにくい・・ですネ
    よってSet objAcroPDPage = CreateObject("AcroExch.PDPage")
    は実行エラーになります。
    実際に当サイトには「CreateObject("AcroExch.PDPage")」という感じのサンプルは存在しません。

    正しくはSet objAcroPDPage = ObjAcroPDDocNEW.AcquirePage
    又はDim objAcroAVPageView As Object
    ・・・
    Set objAcroPDPage = objAcroAVPageView.GetPage
    みたいな使い方です。
    他にも似たような感じの箇所は有るはずなので「実行時エラー'429」時は思い出してください。

    ご確認の程、よろしくお願いいたします。

  6. 管理人さん。
    早々にご回答いただきありがとうございました。
    おっしゃる通り、おかしなことをしていました。(-_-;)
    ご教示いただいたとおりに実行したところ、希望通りの処理になりました。
    迅速な対応をしていただき、大変助かりました。

  7. 管理人さん
    Acrobat Pro 11でツールからテキスト認識をページ単位で行えるかと
    思いますが、VBAで座標を指定して、ある特定の位置のテキスト認識が
    可能かご教示頂けると幸いです。
    お忙しいところお手数をお掛けしますが宜しくお願い致します。

    環境は
    Windows10
    Acrobat Pro 11
    Access VBA

  8. たけ さん はじめまして。
    取りあえず思い出せる範囲で返答します。

    1)CropPageで範囲を指定してトリミングを行う。
    2)上記に対して、CreatePageHilite又はCreateWordHiliteでテキストを抽出する

    てな感じです。
    2のCreatePageHilite又はCreateWordHiliteでも範囲指定が有りますが、かなり面倒だった様な気がします。それならば1でトリミングしたページの全体を抽出した方が楽だと思います。
    サンプルをステップ実行しながら、見て頂ければ理解できるかと思います。(タブン

    しかし。テキスト認識はコメント投稿者からの要望、問題点、解決、失敗(=絶望)、等。かなりの時間を取った箇所なのですが。
    すでにかなりの部分を忘れています。(汗
    2日ほどお時間をください。

    ▼2019/2/4 23:12 追加
    2の部分は
    lRet = objAcroHiliteList.Add(1, 99999)
    てな感じにサンプルを変更したら、トリミングしたテキストを全て抽出できる・・;。

  9. たけ さんへ
    サンプルを作ってみました。
    指定座標で切りとって、そこから全テキストを取得する様にしました。

    動作環境:Win10 64bit + Acrobat XI Pro + Excel 2007
    001 Option Explicit
    002
    003
    004 '座標を指定してその場所のテキストを取得する。
    005
    006 Sub Main_Test()
    007 Dim sPdfFile As String
    008 Dim iPageNo As Long
    009 Dim iTop As Long 'トップ
    010 Dim ibottom As Long '底
    011 Dim iLeft As Long '左
    012 Dim iRight As Long '右
    013 Dim sText As String
    014
    015 'PDFファイルのフルパス
    016 sPdfFile = "X:\Text\AcroPDPage\Test1.pdf"
    017 'ページ番号
    018 iPageNo = 2
    019 '切り取る範囲をポイントで指定する
    020 iTop = 580
    021 ibottom = 450
    022 iLeft = 20
    023 iRight = 200
    024
    025 Call AcroExch_PDPage_CreateWordHilite(sPdfFile, iPageNo, iTop, ibottom, iLeft, iRight, sText)
    026 End Sub
    027
    028 Sub AcroExch_PDPage_CreateWordHilite( _
    029 ByVal sPdfFile As String, _
    030 ByVal iPageNo As Long, _
    031 ByVal iTop As Long, _
    032 ByVal ibottom As Long, _
    033 ByVal iLeft As Long, _
    034 ByVal iRight As Long, _
    035 ByRef sText As String)
    036
    037 Dim objAcroApp As New Acrobat.AcroApp
    038 Dim objAcroHiliteList As New Acrobat.AcroHiliteList
    039 Dim objAcroPDdoc As New Acrobat.AcroPDDoc
    040 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
    041 Dim objAcroPDPage As Acrobat.AcroPDPage
    042 Dim objAcroPDTextSelect As Acrobat.AcroPDTextSelect
    043 Dim objAcroRect As New Acrobat.AcroRect
    044 Dim objAcroPoint As Acrobat.AcroPoint
    045 Dim lRet As Long
    046 Dim lCnt As Long
    047 Dim j As Long
    048
    049 Const DEBUG_MODE As Boolean = True
    050
    051 'PDFを開く
    052 lRet = objAcroAVDoc.Open(sPdfFile, "")
    053 Set objAcroPDdoc = objAcroAVDoc.GetPDDoc
    054
    055 '指定ページを取得する
    056 Set objAcroPDPage = objAcroPDdoc.AcquirePage(iPageNo - 1)
    057
    058 If DEBUG_MODE Then
    059 'Acrobatを起動表示する ※これを実行しないと高速化できる
    060 lRet = objAcroApp.Show
    061 '★Acrobatがデスクトップに表示されるので該当ページに移動する
    062 Set objAcroPoint = objAcroPDPage.GetSize
    063 Debug.Print "ページの幅 =" & objAcroPoint.x & "ポイント"
    064 Debug.Print "ページの高さ=" & objAcroPoint.y & "ポイント"
    065 End If
    066
    067 '切り取る範囲をポイントで指定する
    068 objAcroRect.Top = iTop 'トップ
    069 objAcroRect.bottom = ibottom '底
    070 objAcroRect.Left = iLeft '左
    071 objAcroRect.Right = iRight '右
    072 'ページをトリミング
    073 lRet = objAcroPDPage.CropPage(objAcroRect)
    074 '★この時点のPDFドキュメント画面を見る。
    075
    076 'ハイライトリストを作る。※「テキストのハイライト」では無い
    077 lRet = objAcroHiliteList.Add(0, 10000)
    078
    079 '単語、又は隣接する文字列単位でHiliteListの範囲に従って
    080 ' PDTextSelectオブジェクトを作成する。
    081 Set objAcroPDTextSelect = _
    082 objAcroPDPage.CreateWordHilite(objAcroHiliteList)
    083
    084 'AcroPDTextSelectオブジェクトに従って、
    085 ' 該当PDFページを選択状態にする。
    086 lRet = objAcroAVDoc.SetTextSelection(objAcroPDTextSelect)
    087 '抽出した文字列の数(Index)を取得する
    088 lCnt = objAcroPDTextSelect.GetNumText() - 1
    089 sText = ""
    090 For j = 0 To lCnt
    091 If DEBUG_MODE Then _
    092 Debug.Print objAcroPDTextSelect.GetText(j)
    093 '単語単位で抽出する
    094 sText = sText & objAcroPDTextSelect.GetText(j)
    095 Next j
    096 If DEBUG_MODE Then
    097 Debug.Print ""
    098 Debug.Print sText
    099 Debug.Print ""
    100 End If
    101 Skip:
    102 'PDFファイルを保存しないで閉じる
    103 lRet = objAcroAVDoc.Close(1)
    104
    105 'Acrobatを閉じる
    106 lRet = objAcroApp.Hide
    107 lRet = objAcroApp.Exit
    108
    109 'オブジェクトを強制解放する
    110 Set objAcroPDTextSelect = Nothing
    111 Set objAcroHiliteList = Nothing
    112 Set objAcroPoint = Nothing
    113 Set objAcroPDPage = Nothing
    114 Set objAcroPDdoc = Nothing
    115 Set objAcroAVDoc = Nothing
    116 Set objAcroRect = Nothing
    117 Set objAcroApp = Nothing
    118
    119 End Sub

    上記は単語単位でテキストの取得CreateWordHiliteを行っています。文字単位での取得が最適と考える場合はCreatePageHiliteをご使用下さい。

    座標の使い方についてはコチラを参照ください。

    DEBUG_MODE = False
    にするとAcrobatがデスクトップに表示されずに高速で処理が可能になります。

    以上、ご検証ください。

  10. 管理人さん
    早急にご回答いただきましてありがとうございました。
    また、わかりやすいコメント付のサンプルまで作成していただきまして
    お手数をお掛けしまして大変申し訳ありませんでした。

    なお、私のわかりにくい質問が悪かったのですが、PDFのテキスト読み取りを
    行いたかったのではなく、PDFの画像をテキスト化した上で、テキスト読み取ることが可能かがおわかりでしたらご教示頂けると幸いです。
    今後、わかりやすく質問しますので度々で申し訳ありませんが
    宜しくお願い致します。

  11. たけさんへ
    そ、そうですか~w

    >Acrobat Pro 11でツールからテキスト認識をページ単位で行える
    >かと思いますが、VBAで座標を指定して、ある特定の位置の
    >テキスト認識が可能か

    「テキスト認識」を起動させるという事ですか。
    はっきりと返答できます。

    無理です。

    1)「テキスト認識」そのものを起動するVBA(OLE)が無い
    2)VBAから「テキスト認識」のメニュー起動は出来るが、その次がVBAは出来ない
    3)「テキスト認識」つまりOCR機能はOLEそのものがサポートしてない

    上記サンプルの CropPage を使って指定座標でトリミングを行い、そのPDFを出力する。その出力ファイルを別の XXX ソフトで一括でOCR「テキスト認識」する。・・ぐらいかな。

    たぶん、当サイトでは無理だと思います。

  12. 管理人さん
    ご回答いただきましてありがとうございます。
    できないことがわかってスッキリしました。
    いろいろとご教示頂きまして大変お手数をお掛けしました。

コメントを残す

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

CAPTCHA


★ 文章での質問は難しいですよネ。でも、早く解決して、家に帰りたい。


SAMURAI Plugin

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

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れる時はコードを全て全角文字列にしてください。コチラで半角に戻します。それでもエラーが回避できない時はコメント下さい。個別に対処します。



お仕事で当サイトを見ている方へ
考え込んだら、ご質問下さい。
一緒に解決策を考えましょう。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください