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へ >
管理人さん
はじめまして。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アプリケーションの起動は行わずに処理したいと考えています。
ご確認よろしくお願いします。
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
管理人さん
katです。
早速の調査およびご回答ありがとうございます。
作成したPDFをエンドユーザに配布するのですが、Acrobat5.0以降を
サポートする必要があるため、検証②の方法だと旧バージョンが対応していないので厳しいです。
(初めに、要件について記載出来ていなくてすいません)
私の実行環境はAcrobat X(v10)なので、
PDFファイル自体のプロパティを設定出来そうな検証①の方法が出来れば良いのですが…
お忙しいところ申し訳ございませんが、引き続きよろしくお願いします。
kat さんへ。
(他の件を処理途中ですが・・・。)
少し気になったので再度、前の検証結果を再検証しました。検証②は保留にして下さい。
再現できません。
落ち着いたら、イチから見直します。
kat さんへ。
最初に結果から。
前のコメントで掲載した検証②でのAcrobat JavaScriptでの強制表示以外は手段が見つかりませんでした。
以下にここまでの調査と検討結果を報告させて頂きます。
① katさんが言っていましたバッチ処理(Acrobat X[v10]以降ではアクションウイザード)でPDF文書のプロパティの「ページレイアウト」と「倍率」は変更出来ました。
それを当サイトのOLEから起動できないかと調査しましたが、それが出来る方法が見つかりませんでした。
なお、アプリの自動化操作ソフト等を使ってAcrobatアプリをプログラミング操作すれば出来るとは思うのですが、katさんが望む方法とは思えません。
② OLEからAcrobat JavaScrit等を起動して、PDF文書のプロパティを変更する方法を再度、手持ちSDK文書、ネット情報等で再検討しましたが、該当する項目はありませんでした。
③ 念の為に別ツール等でプログラミング・コントロール出来そうなモノはないかとネット検索しましたが、該当するものは見つかりませんでした。
以上は当サイト管理人個人の結果です。
よって出来なかった、のでは無く見つけられなかったが正解と思って下さい。
Adobe日本語フォーラム等への質問等をお願いします。
解決に至らなく、残念です。
管理人さん
いろいろと調査いただき、誠にありがとうございました。
報告いただいた中の①について、
現在アクションウィザードを手動で実行しているため、それをOLEでプログラミング操作しようと当初は考えていましたが、
>アプリの自動化操作ソフト等を使ってAcrobatアプリをプログラミング操作すれば出来るとは思うのですが…
の方法で自動化(一定の時間間隔で起動する等)でも良いかなと考えています。
この方法について詳細を教えていただいてもよろしいでしょうか?
(フリーソフト等を使用するということでしょうか…?)
お忙しいところ度々すいませんが、よろしくお願いいたします。
katさんへ。
現在のこの手の自動化ソフトで一番有名なのが「UWSC」です。
フリーですが、有料のプロ版も有ります。
フリーの自動化ソフトはコレ以外にも多数ありますが、このソフトが現在もバージョンアップを繰り返しています。
但し、この手のソフトを業務で使用するのは企業側としては嫌われます。
大手メーカーの高価な自動化ソフトに関しては知識が無いので返答は出来ません。
VBAからWindowsAPIを使ってのアプリケーション操作も有ります。
この手の情報は一般的に公開されてないです。
プログラミングも非常に難しいのでお勧めは出来ません。
その情報もWindows 98? XP? 対応だったので、Win7で動く保証も無いです。
※押入れに入っている40枚ほどのCDから探せば有るかもしれませんが・・(汗
余談ですが、VBA命令だけでも簡単なアプリケーションの自動化は出来ます。但し、そのVBAが動いている間は全くパソコンの操作が出来ません。
また失敗した場合の判断も出来ません。
一応、その情報の分かりそうなサイトを以下に紹介しておきます。
http://officetanaka.net/excel/vba/tips/tips65.htm
Sleep関数で適当な待ち時間を命令の間に入れれば成功率は上がりますが、それでもエラーは出ます。
手っ取り早く出来るので昔は一時的に使いましたが・・。
ご検討下さい。
管理人さん
早速のご回答ありがとうございます。
いろいろといただいた回答をもとに検討したいと思います。
また何かありましたらアドバイスいただけると助かります。
この度は本当にありがとうございました。
tmk さんへ。
※このコメントはココの続きです。
「文書プロパティの倍率」を変更する為のVBA、OLE、Acrobat JavaScript 、コマンドラインツール は見つかっていません。
そこで「文書プロパティの倍率」を変更する別の方法をご提案します。
事前にtmk さん作成のVBAでPDFファイルを一括で作成します。
その後でAcrobat DCで事前に作成したアクション処理で文書プロパティの倍率を一括で変更します。
以下はAcrobat DC 上でアクション(旧:バッチ処理)の作成と実行を解説したページです。
「ACROBAT DC:複数のPDF内の文字を一括でアウトライン化」
記事は「アウトライン」ですが、その部分を「文書プロパティの倍率の変更」に置き換えてください。
上記ページ内容で置き換わる部分の一部です。
2. 画面上部の「新規アクション」をクリックします。
3. 画面左から、「文書処理」->「開き方の設定」をクリックします。すると画面右の名称未設定に「開き方の設定」が追加されます。
4. その「開き方の設定」に有る「設定を指定」をクリックします。
5. 「開き方」画面の「変更しない」チェックをオフにすると、倍率が変更できます。
ご検討ください。
管理人さん
色々と調べてくださり、どうもありがとうございます。
私のAcrobatはStandardの為、アクションウィザードはありませんでした。
ご提案くださったのに申し訳ありません。
また、私のしたい事は文書ではなく、「しおり」なのです。
色々調べましたが、一括で変更する方法がなく、仕方なくフリーのプラグインに頼っている状況です。
やはりこのままSendkeysで行うしかなさそうですね・・・。
tmk さんへ
こちらの方ではプラグインをAcrobatメニューで操作出来るようには出来ましたが、なぜかどうしても動作を反映させる事が出来ません。
それでお願いが有ります。
「AcroExch.App: MenuItemExecute メソッド」の第一引数に以下の2~6項目を割り当てて動作確認をしてほしいのです。
例:lRet = objAcroApp.MenuItemExecute("ADBE:InheritZoom")
ADBE:ZoomRatioOfBookmarks
ADBE:InheritZoom
ADBE:FitPage
ADBE:ActualSize
ADBE:FitWidth
ADBE:FitVisible
上記はこちらで調べた限りではAcrobat内部で扱うプラグインのメニュー名になっていると思われます。順に
1. しおりのズーム倍率:ADBE:ZoomRatioOfBookmarks <-TOP
2. ズーム設定維持:ADBE:InheritZoom
3. 全体表示:ADBE:FitPage
4. 100%表示:ADBE:ActualSize
5. 幅に合わせる:ADBE:FitWidth
6. 描画領域の幅に合わせる:ADBE:FitVisible
に対応している思われます。よって、MenuItemExecute メソッドで実行できるかもしれません。一字一句間違っても駄目なのでコピペしてください。
"InheritZoom"では無く"ADBE:InheritZoom"が正解と思っています。F8キーでステップ実行して確認できるはずです。
お手数ですが、よろしくお願いいたします。
管理人さん
ご提示いただいた方法で、望み通りの操作を実現する事ができました。
これで安心して使用する事ができます。
お忙しい中調査していただき、本当にありがとうございました。
tmk さんへ
出来ました?! 本当に? イヤ~、良かった~!
プラグインで内部のメニュー名を正しく設定してくれて助かりました。
もしかしたら・・、と思って内部メニュー名の一覧をAcrobat JavaScriptを使って取り出したら出てきました。
tmk さんの
>やはりこのままSendkeysで行うしかなさそうですね・・・。
の最後の言葉を読んだ時に、思い出しました。
良かったです。 v(^_^)
管理人さん
管理人さんが詳しく説明してくださったおかげで
無事完成させる事ができました!
とても勉強になりました。
本当にありがとうございました。