TOP > AcroExch.AVDoc > Open [...]
説明
PDFドキュメント(オブジェクト)、又はAcrobatがサポートしている画像ファイル(jpeg,png等)を開きます。
Acrobatアプリケーションが起動されていれば指定したファイルは画面表示されます。(<-注意事項有り)
Acrobatアプリケーションが起動されて無い時はインスタンス(オブジェクト)のみ作成します。
形式
VARIANT_BOOL Open(BSTR szFullPath,
BSTR szTempTitle);
戻り値
- 戻り値が-1の時は成功。
- 戻り値が0の時は失敗。
引数
- 第一引数(BSTR szFullPath) :
PDFファイルのフルパス。
Acrobatがサポートしている画像ファイル(jpeg,png等)のフルパス。 - 第二引数(BSTR szTempTitle) :
開く時のタイトル。指定無し””でも構わない。
動作するバージョン
Version | Adobe Acrobat | 備考 |
---|---|---|
4 | - | Acrobat 4.0 ※Windows 98SE + Excel 2000 |
5 | - | Acrobat 5.0.5 |
6 | OK | 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キーでステップ実行しながら動作確認する。
- 事前に参照設定をする。
001 Sub AcroExch_AVDoc_Open()
002 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
003 Dim lRet As Long
004
005 'PDFファイルを開く。
006 On Error Resume Next
007 lRet = objAcroAVDoc.Open("E:\Test01.pdf", "")
008 If lRet = False Then
009 'Acrobatがエラーメッセージを表示する
010 MsgBox "AVDOC.Open Error " & lRet
011 'PDFファイルを保存せずに全て閉じます。
012 lRet = objAcroAVDoc.Close(1)
013 GoTo Skip_CommandButton01_Click
014 End If
015
016 'ここで各種PDFの処理を行う。
017
018 'PDFファイルを保存して閉じます。
019 lRet = objAcroAVDoc.Close(0)
020
021 Skip_CommandButton01_Click:
022
023 'PDFオブジェクトを強制解放する
024 Set objAcroAVDoc = Nothing
025 End Sub
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
補足
- OpenしたPDFドキュメント、又はAcrobatがサポートしている画像ファイル(jpeg,png等)は必ずCloseAllDocsメソッドかCloseメソッドで閉じる必要がある。その処理をしないとAcrobatアプリケーションを再起動した時に、そのファイルが指定をしないのに再表示される。
注)何らかに形でインスタンス情報がメモリ上に残る為です。 - Openしたファイルを画面表示せずに処理することが可能です。これがこのOpenメソッドの最大の特徴です。
- PDFファイルに開くときのパスワードが設定されていると、このOpenメソッドで一時的に停止して画面上にパスワード入力を要求するダイアログ画面が表示されてしまいます。
これを回避するには以下のメソッドを事前に実行してください。
AcroExch.PDDoc:Open メソッド
上記メソッドでFalse(0)が返ってきた時は「PDFを開くときのパスワード付き」ファイルと判断できます。
注意 ①
- 存在しないFファイルを指定すると処理を中断し、Acrobatアプリケーションから以下のエラーメッセージ・ダイアログが表示されます。
※「この文書を開くときにエラーが発生しました。このファイルが見つかりません。」 - 事前にPDFファイル、又はAcrobatがサポートしている画像ファイル(jpeg,png等)をチェックするロジックを当Openメソッドの前に入れる方が最良の方法だと思います。
下記のサンプルはExcelファイルの拡張子をPDFにしたものです。Dir関数で先にエラーになります。
001 Private Sub CommandButton01A_Click()
002 Dim objAcroApp As New Acrobat.AcroApp
003 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
004 Dim lRet As Long
005 Const CON_FILENAME As String = "E:\Test01_excel.pdf"
006
007 'PDFファイルの属性チェック
008 If Dir(CON_FILENAME, vbNormal) = "" Then
009 MsgBox CON_FILENAME & _
010 " ファイルは存在しないか、PDFではありません。", _
011 vbOKOnly + vbExclamation, "エラー"
012 GoTo Skip_CommandButton01_Click
013 End If
014
015 'Acrobatアプリケーションを起動する。
016 lRet = objAcroApp.Show
017 'PDFファイルを開いて表示する。
018 lRet = objAcroAVDoc.Open(CON_FILENAME, "")
019 If objAcroAVDoc.IsValid = 0 Then
020 MsgBox CON_FILENAME & _
021 " ファイルはPDFではありません。", _
022 vbOKOnly + vbExclamation, "エラー"
023 GoTo Skip_CommandButton01_Click
024 End If
025
026 'PDFファイルを全て閉じます。
027 lRet = objAcroApp.CloseAllDocs
028
029 'Acrobatアプリケーションを終了する。
030 lRet = objAcroApp.Hide
031 lRet = objAcroApp.Exit
032
033 Skip_CommandButton01_Click:
034
035 'PDFオブジェクトを強制解放する
036 Set objAcroAVDoc = Nothing
037 Set objAcroApp = Nothing
038 End Sub
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
備考
- kenkenさんのコメントを元に一部を修正させて頂きました。
この場を借りてお礼を申し上げます。
注意 ②
★2009/01/07 追加
- Acrobat v8.1.3、v9.0の場合、オブジェクトは生成され、戻り値もTrue(-1)だが、ファイルが画面表示されない現象が発生しています。
原因不明です。
Windows環境やExcelバージョンを変えても結果は同じ。なぜPDFドキュメント、又はAcrobatがサポートしている画像ファイル(jpeg,png等)が画面に表示されないかは、分からないです。
Acrobat v7.0ではPDFがAcrobat上に画面表示される。
動作確認環境
- WindowsXP Pro(+ SP3) +
Acrobat 6.0.3 Pro + Office 2003 + MicrosoftUpdate - WindowsXP Pro(+ SP3) +
Acrobat 8.1.2 Pro + Office 2003 + MicrosoftUpdate
< 戻る >
ブラウザ画面の文字サイズを変更するショートカットキー
|
管理人様
初めて送信します。
いろいろなサイトを見てきました。
VB.NETでAVDoc.Openを上記のように実行していますが、
パスワードつきPDFの場合、Open()メソッドで停止してしまいます。
パスワードつきPDFの場合、エラーとできればよいのですが
Open前にパスワードつきかどうか判断する方法を
教えていただけないでしょうか?
きんじ さん。
初めまして。
> パスワードつきPDFの場合、・・・
ここで言っているパスワードとは「文書を開くときのパスワード」の事ですね。
> ・・・Open()メソッドで停止してしまいます。
停止と言うよりはパスワード入力を要求されるダイアログが表示されるので一時停止する、と思っています。
> Open前にパスワードつきかどうか判断する方法を・・・
当サイトで記載している情報ではPDFを開く時にパスワード付きPDFかの判断が出来る特定の命令は見当たりません。
しかし、以下の命令を使うとOpen時にエラーが帰る事がテストで確認できました。
AcroExch.PDDoc:Open メソッド
・Adobe Acrobat 8 Professional
・Windows 7 64Bit
上記環境でテストした結果です。
少しでも解決につながれば幸いです。
管理人様
回答ありがとうございます。
PDDoc:Openメソッドによって回答通り、パスワードつきPDFをエラーとして対応できることが分かりました。
確認環境は下記の通りです。
・Adobe Acobat XI Professional
・Windows 7 32bit
解決できて、助かりました。本当にありがとうございました。
きんじ さんへ
v(^_^) イエーイ
以前(かなり前)に質問させていただいた者です。
また、教えてください。
lRet = objAcroAVDoc.Open
lRet = objAcroPDDoc.Open
この2つの使い分けは、どのように考えればよいのですか?
現在はプリントやトリミングの際に使用しており、なんとなくobjAcroAVDocであけています。
なかはら さんへ。
Acrobat OLEを使うときはメモリ上でAdobe Acrobat本体が実行されます。
Dim objAcroApp As New Acrobat.AcroApp
objAcroApp.Show
でデスクトップ上にそのAdobe Acrobat本体も表示することができます。
※以下、バージョン番号は正確で無いです。
▼PDFのオープンの仕方の違い:
objAcroAVDoc.Open を実行するとAdobe Acrobat本体にオープンしたPDFが表示されます。その分、CPUを使うので処理速度が落ちます。
objAcroPDDoc.Open はオープンしてもPDFは表示しません。よって処理が早いです。PDFの処理件数が多ければ、その差は歴然です。
ただし、これはAcrobat v7,8、9 ぐらいまでの古いバージョンでの仕様だったと思います。
Acrobat X(v10)?ぐらいから、objAcroAVDoc.Open でも表示されなくなりました。理由は調査していません。
よって、新しいバージョンのAcrobatの場合はCPUの処理時間を気にする必要は無くなった、のかもしれません。
正確に計測はしてないので、これも不明です。
ただAcrobatのUpdateによって、なんらかの拍子に以前の仕様?通りに表示されるようになるかもしれません。
▼結果:
>・・なんとなくobjAcroAVDocであけています。
もし客先への納品物ならば、できれば、objAcroPDDoc.Openの方が良いです。後日、PDFが画面に表示されたら困ります。
ただ無理してPDDocを使って、オブジェクト連携が発生し、処理時間が増えるのも考えてしまいます。
処理速度、メンテナンス性、稼働環境(客先)、等を考慮して、使い分けてください。
社内、個人で使うのなら、どちらでもOKです。
ご返答ありがとうございます。
しばらくは両方を使い比較してみます。
OLEに関するわかりやすいサイトがないものですから、とても助かっています。