AcroExch.AVPageView メソッド一覧

TOP > AcroExch.AVPageView      [...]


一覧

現在、画面に表示されているPDFページに関する情報を取得したり、操作をするオブジェクトです。

内容的には「AcroPDFLib.AxAcroPDFオブジェクト」と似ていますが、

AcroPDFLib.AxAcroPDF」と違うのは他のオブジェクトと連携している事です。

 

メソッド 解説
DevicePointToPage ディバイススペースからユーザスペースまでポイントの座標を変換します。
DoGoBack もし表示履歴スタックがあれば、それを利用して以前に表示したページに戻ります。※WEBブラウザの「戻る」ボタン機能と同じ動作をします。
DoGoForward もし表示履歴スタックがあれば、それを利用して以前に表示したページに進みます。※WEBブラウザの「次へ進む」ボタン機能と同じ動作をします。
GetAperture 現在表示しているPDFページの四方サイズ(AcroRectオブジェクト)を得る。
GetAVDoc 現在のページに関連しているAcroExch.AVDocオブジェクトを取得します。実際はドキュメント全体がオブジェクトとして返されます。
GetDoc 現在のドキュメントに対応させたAcroExch.PDDocオブジェクトを取得します。
GetPage 現在のPDFドキュメントに対応させたAcroExch.PDPageオブジェクトを取得します。
GetPageNum 現在表示している頁番号を取得する。最初の頁は0で返される。
GetZoom 現在表示されているPDFページのズーム比をパーセントとして得ます。
GetZoomType 現在、表示しているPDFページのズームタイプを得る。
Goto 指定された頁に移動します。
PointToDevice ユーザスペースから装置スペースまでポイントの座標を変換します。(注意:使用は推奨されない。)
ReadPageDown 表示画面単位で次へ1画面スクロールする。
ReadPageUp 表示画面単位で前へ1画面スクロールする。
ScrollTo 画面を指定ポイント(X,Y)でスクロールする。
ZoomTo 現在表示されているPDFページを、指定された表示タイプや倍率でズーム表示する。

 





TOPへ

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

  1. 管理人さん

    はじめまして。katと申します。
    よろしくお願いします。

    AcrobatのOLE機能を使用し、Acrobatのプロパティで「開き方」の
    設定にある以下2点の設定を行いたいと考えています。
    ①ページレイアウト : 連続ページ
    ②倍率       : 幅に合わせる

    管理人さんのホームページにあるサンプルソースを参考にさせていただき、
    以下のソースで実行したのですが、保存されたPDFのプロパティを確認すると
    倍率が「デフォルト」となっておりました。

    ***************************************************************
    Dim objAcroApp As New Acrobat.AcroApp
    Dim objAcroAVDoc As New Acrobat.AcroAVDoc
    Dim objAVPageView As Acrobat.AcroAVPageView
    Dim objAcroPDDoc As Acrobat.AcroPDDoc
    Dim lRet As Long

    lRet = objAcroApp.Show
    lRet = objAcroAVDoc.Open("D:\TEST_INPUT.pdf", "")

    Set objAVPageView = objAcroAVDoc.GetAVPageView
    lRet = objAVPageView.ZoomTo(AVZoomFitWidth, 50)

    Set objAcroPDDoc = objAVPageView.GetDoc
    lngRet = objAcroPDDoc.Save(PDSaveFull, "D:\TEST_OUT.pdf")
    ***************************************************************

    管理人さんのホームページ(「AcroExch.AVPageView:ZoomTo メソッド」ページの補足)で
    >「ウィンドウの幅に合わせて連続ページで表示」の設定には影響を与えない。
    という記載も気になっているのですが、以下の点について教えていただけますでしょうか?

    ・倍率を「幅に合わせる」にはどうすればよいか
    ・ページレイアウトを「連続ページ」に設定する方法

    ※現在、複数のPDFをバッチ処理でまとめて実行しているため、出来ればApp.Show等で
     Acrobatアプリケーションの起動は行わずに処理したいと考えています。

    ご確認よろしくお願いします。

  2. kat さん。
    はじめまして。
    中間報告ですが取り急ぎ、ご報告させて頂きます。

    ① objAVPageViewオブジェクトは基本的に画面表示「中」の動作を「直接」操作する物で、PDFファイルのプロパティを変更するオブジェクトではありません。
    設定内容の表示等も出来ますが、逆の設定変更メソッド(命令)が無いのはその為です。
    よって、katさんのVBAコードは何ら期待する結果は出ません。

    ② 以下のavpDefaultZoomType関連も
    http://pdf-file.nnn2.com/?p=207
    Acrobatアプリ本体の基本設定を変更する物で、PDFファイルのプロパティを変えるものでは無いです。
    ※念の為に報告


    PDFファイルのプロパティ変更はOLEでは一部しかサポートされてないのが現状です。
    過去にも質問を受けましたが、返答できなかった記憶が有ります。
    しかし、それでは困ると思いますので、イロイロと裏技的な方法を検討しています。

    ※検証環境:Acrobat X(v10) , Acrobat XI(v11)

    検証①:
    ExecuteThisJavascriptを使ってAcrobat JavaScriptで以下のコードを実行。
    //「連続ページ」に表示方法を変更
    this.layout = "OneColumn";
    //「幅に合わせる」に表示方法を変更
    this.zoomType = zoomtype.fitW;
    結果:
    反映はされませんでした。

    検証②:
    AddDocJavascriptでPDFファイルに上記のAcrobat JavaScriptを強制的に埋め込みました。
    結果:
    PDFファイルのプロパティは変更されませんが、PDFを開いた時は必ず上記のAcrobat JavaScriptが実行されるので、
    ページレイアウト : 連続ページ
    倍率       : 幅に合わせる
    の状態にはなります。
    あくまでも、表示する前に表示方法を無理矢理に変更するやり方です。
    PDFのプロパティは変更されません。

    現時点ではAcrobatのOLE及びAcrobat JavaScriptを使ってもPDFのプロパティで「ページレイアウト」と「倍率」の設定変更は出来ません。
    なお、Acrobat JavaScriptに関してはまだまだ勉強不足ですが、マニュアルを見て判断させて頂きました。


    現在は「透かしの追加」に関する質問の処理途中です。
    それが片付いたら引き続きご返答させて頂きます。


    一応、検証②のコードを以下に掲載します。

    Option Explicit

    Const PDSaveFull = &H1
    Const PDSaveLinearized = &H4
    Const PDSaveCollectGarbage = &H20

    Sub AddDocJavascript_Test_04()
    On Error GoTo Err_AddDocJavascript_Test_04:

    Dim bRet As Boolean
    Dim bEnd As Boolean
    Dim objAFormApp As AFORMAUTLib.AFormApp
    Dim objAFormFields As AFORMAUTLib.Fields
    Dim strJavaScript As String
    Dim c13 As String

    '初期値
    Const strFilePath = "D:\work\VBJavaScript.pdf"
    Const strFilePath_new = "D:\work\VBJavaScript_new.pdf"
    c13 = Chr(13) '改行

    'Acrobatオブジェクトの定義&作成
    Dim objAcroApp As New Acrobat.AcroApp
    Dim objAcroAVDoc As New Acrobat.AcroAVDoc
    Dim objAcroPDDoc As New Acrobat.AcroPDDoc

    '※CreateObject("AFormAut.App")のエラー
    '※[429 ActiveXコンポーネントはオブジェクトを作成できません。]
    '※回避用 / メモリにAcrobatを強制ロードさせる
    objAcroApp.CloseAllDocs

    '処理対象のPDFファイルを開く

    '※objAFormApp.Fieldsを実行するには
    '※AVDocオブジェクトを開いておく必要がある。
    bRet = objAcroAVDoc.Open(strFilePath, "")
    If bRet = False Then
    MsgBox strFilePath_new & vbCrLf & _
    "ファイルが AVDoc.Open 出来ません。", _
    vbOKOnly + vbCritical, "エラー"
    bEnd = False
    GoTo Skip_AddDocJavascript_Test_04:
    End If

    'Fieldsオブジェクトの作成
    Set objAFormApp = CreateObject("AFormAut.App")
    Set objAFormFields = objAFormApp.Fields

    'Acrobat JavaScriptを編集する
    strJavaScript = "this.layout = 'OneColumn';" & c13 & _
    "this.zoomType = zoomtype.fitW;;"

    'PDFへ文書レベルのJavaScriptを追加する
    '注意:追加されたJavaScriptがこの時点で一度実行される
    objAFormFields.AddDocJavascript "hoge", strJavaScript

    '最適化して上書き保存する
    '※追加されたJavaScriptはココでは実行されない
    Set objAcroPDDoc = objAcroAVDoc.GetPDDoc
    bRet = objAcroPDDoc.Save(PDSaveFull + _
    PDSaveLinearized + PDSaveCollectGarbage, _
    strFilePath_new)
    If bRet = False Then
    MsgBox "PDFファイルへ PDDoc.Save 出来ません。", _
    vbOKOnly + vbCritical, "エラー"
    bEnd = False
    End If

    Skip_AddDocJavascript_Test_04:
    On Error Resume Next
    '強制でPDFを閉じます。
    bRet = objAcroPDDoc.Close
    bRet = objAcroAVDoc.Close(False)
    bRet = objAcroApp.CloseAllDocs

    'Acrobatアプリケーションの強制終了
    objAcroApp.Hide
    objAcroApp.Exit

    'オブジェクトの強制開放
    Set objAFormFields = Nothing
    Set objAFormApp = Nothing
    Set objAcroAVDoc = Nothing
    Set objAcroPDDoc = Nothing
    Set objAcroApp = Nothing

    If bEnd = True Then
    MsgBox "処理は正常に終了しました。", _
    vbOKOnly + vbInformation, "正常終了"
    End If
    Exit Sub

    Err_AddDocJavascript_Test_04:
    '実行時のエラーメッセージを表示
    MsgBox Err.Number & vbCrLf & Err.Description, _
    vbOKOnly + vbCritical, "実行時のエラー"
    bEnd = False
    GoTo Skip_AddDocJavascript_Test_04:
    End Sub

    上記の詳細な説明は以下を参照。
    http://pdf-file.nnn2.com/?p=764

  3. 管理人さん

    katです。
    早速の調査およびご回答ありがとうございます。

    作成したPDFをエンドユーザに配布するのですが、Acrobat5.0以降を
    サポートする必要があるため、検証②の方法だと旧バージョンが対応していないので厳しいです。
    (初めに、要件について記載出来ていなくてすいません)

    私の実行環境はAcrobat X(v10)なので、
    PDFファイル自体のプロパティを設定出来そうな検証①の方法が出来れば良いのですが…

    お忙しいところ申し訳ございませんが、引き続きよろしくお願いします。

  4. kat さんへ。
    (他の件を処理途中ですが・・・。)

    少し気になったので再度、前の検証結果を再検証しました。
    検証②は保留にして下さい。
    再現できません。

    落ち着いたら、イチから見直します。

  5. kat さんへ。

    最初に結果から。
    前のコメントで掲載した検証②でのAcrobat JavaScriptでの強制表示以外は手段が見つかりませんでした。

    以下にここまでの調査と検討結果を報告させて頂きます。

    ① katさんが言っていましたバッチ処理(Acrobat X[v10]以降ではアクションウイザード)でPDF文書のプロパティの「ページレイアウト」と「倍率」は変更出来ました。
    それを当サイトのOLEから起動できないかと調査しましたが、それが出来る方法が見つかりませんでした。
    なお、アプリの自動化操作ソフト等を使ってAcrobatアプリをプログラミング操作すれば出来るとは思うのですが、katさんが望む方法とは思えません。

    ② OLEからAcrobat JavaScrit等を起動して、PDF文書のプロパティを変更する方法を再度、手持ちSDK文書、ネット情報等で再検討しましたが、該当する項目はありませんでした。

    ③ 念の為に別ツール等でプログラミング・コントロール出来そうなモノはないかとネット検索しましたが、該当するものは見つかりませんでした。

    以上は当サイト管理人個人の結果です。
    よって出来なかった、のでは無く見つけられなかったが正解と思って下さい。
    Adobe日本語フォーラム等への質問等をお願いします。

    解決に至らなく、残念です。

  6. 管理人さん

    いろいろと調査いただき、誠にありがとうございました。

    報告いただいた中の①について、
    現在アクションウィザードを手動で実行しているため、それをOLEでプログラミング操作しようと当初は考えていましたが、

    >アプリの自動化操作ソフト等を使ってAcrobatアプリをプログラミング操作すれば出来るとは思うのですが…

    の方法で自動化(一定の時間間隔で起動する等)でも良いかなと考えています。

    この方法について詳細を教えていただいてもよろしいでしょうか?
    (フリーソフト等を使用するということでしょうか…?)

    お忙しいところ度々すいませんが、よろしくお願いいたします。

  7. katさんへ。

    現在のこの手の自動化ソフトで一番有名なのが「UWSC」です。
    フリーですが、有料のプロ版も有ります。
    フリーの自動化ソフトはコレ以外にも多数ありますが、このソフトが現在もバージョンアップを繰り返しています。

    但し、この手のソフトを業務で使用するのは企業側としては嫌われます。
    大手メーカーの高価な自動化ソフトに関しては知識が無いので返答は出来ません。

    VBAからWindowsAPIを使ってのアプリケーション操作も有ります。
    この手の情報は一般的に公開されてないです。
    プログラミングも非常に難しいのでお勧めは出来ません。
    その情報もWindows 98? XP? 対応だったので、Win7で動く保証も無いです。
    ※押入れに入っている40枚ほどのCDから探せば有るかもしれませんが・・(汗

    余談ですが、VBA命令だけでも簡単なアプリケーションの自動化は出来ます。
    但し、そのVBAが動いている間は全くパソコンの操作が出来ません。
    また失敗した場合の判断も出来ません。
    一応、その情報の分かりそうなサイトを以下に紹介しておきます。
    http://officetanaka.net/excel/vba/tips/tips65.htm
    Sleep関数で適当な待ち時間を命令の間に入れれば成功率は上がりますが、それでもエラーは出ます。
    手っ取り早く出来るので昔は一時的に使いましたが・・。

    ご検討下さい。

  8. 管理人さん

    早速のご回答ありがとうございます。
    いろいろといただいた回答をもとに検討したいと思います。

    また何かありましたらアドバイスいただけると助かります。
    この度は本当にありがとうございました。

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin