TOP > AcroExch.PDDoc > Open [...]
説明
1つのPDFドキュメントをサイレント(画面に表示しない)で開く。
形式
VARIANT_BOOL Open(BSTR szFullPath);
引数
- 第1引数(BSTR szFullPath) :
開くPDFファイルのフルパス。
戻り値
- -1 : 成功。
- 0 : 失敗。
動作するバージョン
Version | Adobe Acrobat | 備考 |
---|---|---|
4 | - | Acrobat 4.0 ※Windows 98SE + Excel 2000 |
5 | - | Acrobat 5.0.5 + Excel 2003 |
6 | - | Acrobat 6.0.6 Pro + Excel 2003 |
7 | - | Acrobat 7.1.4 Pro + Excel 2003 |
8 | OK | Acrobat 8.1.2 Pro + Excel 2003 |
9 | - | Acrobat 9.5.2 Extended + Excel 2003 |
10 | OK | Acrobat X(10.1.4) Extended + Excel 2003 |
11 | - | Acrobat XI (11.0.04) Extended |
- OK : 動作する。
- NO : 動作しない。 戻り値が0を返す。
- - : 未確認。
サンプル:ExcelのVBA
説明:サイレントでPDFドキュメントの最初のページを削除する。保存はしない。
- F8キーでステップ実行しながら動作確認する。
- 事前に参照設定をする。
001 Sub AcroExch_PDDoc_Open()
002
003 Dim objAcroPDDoc As New Acrobat.AcroPDDoc
004 Dim lRet As Long
005
006 'PDFファイルを開いて表示する
007 lRet = objAcroPDDoc.Open("E:\TestPDF.pdf")
008 If lRet = False Then
009 MsgBox "AcroExch_PDDoc_Open エラー"
010 GoTo AcroExch_PDDoc_Open_Sklip
011 End If
012 '最初のページのみ削除する
013 lRet = objAcroPDDoc.DeletePages(0, 0)
014
015 AcroExch_PDDoc_Open_Sklip:
016 'PDFファイルを変更を反映せずに閉じる ※エラーは出ない
017 lRet = objAcroPDDoc.Close
018 'オブジェクトを強制開放する
019 Set objAcroPDDoc = Nothing
020
021 End Sub
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
補足
- OpenするPDFファイルはローカルのハードディスク上に存在する必要があります。
- OpenするPDFファイルにURLパスを指定すると、エラーコード(0) が返されます。
- PDFファイルに「文書を開くときにパスワードが必要 / 文書を開くパスワード」設定がされている時は、戻り値に False (0) が返されます。 ※テスト結果
つまり、PDFを開くときのパスワードが設定されているかの判断は当メソッドで出来ます。
・Acrobat 8 + Windows 7 環境下でテストした結果です。
・PDFを開くときにパスワード設定がされているかを判断する特定のメソッド等はOLE(IAC)には見当たりません。
動作確認環境
- WindowsXP Pro(+ SP3) +
Acrobat 8.1.2 Pro + Office 2003 + MicrosoftUpdate - WindowsXP Pro(+ SP3) +
Acrobat X(10.1.4) Extended + Office 2003 + WindowsUpdate
< 戻る >
管理人様
複数のtiffファイルを一つのpdfファイルにするアクロバットプロで行う作業をエクセルのVBAから行いたいと考えています。
そもそもpdf以外のファイルを開くメソッドはなんなのでしょうか? Openではエラーになるようです。
当方、VBAはそこそこ使えますがアクロバットを扱うのは初めてです。 ざっと本HPを眺めさせて頂きましたが分からず質問させていただきました。
その他、本目的にあったヒントを頂ければ幸いです。
使用環境
・Win7 ないし Win8
・Excel2010
・Acrobat X Pro
ぽん太 さん
はじめまして。
サンプルを作ってみました。
Page_1.tiff の後に Page_2.tiff を追加してPDFファイルで出力します。
詳細は各メソッドのHPページを御覧ください。
001 Option Explicit
002
003 Sub Test_sub()
004 On Error Resume Next
005
006 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
007 Dim objAcroPDDocNew As New Acrobat.AcroPDDoc
008 Dim objAcroPDDocAdd As New Acrobat.AcroPDDoc
009 Dim lGetNumPages As Long
010 Dim lPages As Long
011 Dim lRet As Long
012 Dim sPath As String
013
014 '初期化
015 sPath = "D:\word\"
016 lPages = 0
017
018 '▼空のPDFファイルを作成する
019 lRet = objAcroPDDocNew.Create()
020
021 '▼空のPDFファイルに追加する
022 lRet = objAcroAVDoc.Open(sPath & "Page_1.tiff", "")
023 If lRet = False Then
024 'Acrobatがエラーメッセージを表示する
025 MsgBox "AVDOC.Open Error (1)" & lRet
026 'PDFファイルを保存せずに全て閉じます。
027 lRet = objAcroAVDoc.Close(1)
028 GoTo Test_sub_Skip:
029 End If
030 Set objAcroPDDocAdd = objAcroAVDoc.GetPDDoc
031 lGetNumPages = objAcroPDDocAdd.GetNumPages()
032 lRet = objAcroPDDocNew.InsertPages(lPages - 1, _
033 objAcroPDDocAdd, 0, lGetNumPages, True)
034 lRet = objAcroPDDocAdd.Close()
035 lRet = objAcroAVDoc.Close(1) '保存しないで閉じます。
036
037 lPages = lPages + lGetNumPages
038
039 '▼更にPDFファイルを追加する
040 lRet = objAcroAVDoc.Open(sPath & "Page_2.tiff", "")
041 If lRet = False Then
042 'Acrobatがエラーメッセージを表示する
043 MsgBox "AVDOC.Open Error (2)" & lRet
044 'PDFファイルを保存せずに全て閉じます。
045 lRet = objAcroAVDoc.Close(1)
046 GoTo Test_sub_Skip:
047 End If
048 Set objAcroPDDocAdd = objAcroAVDoc.GetPDDoc
049 lGetNumPages = objAcroPDDocAdd.GetNumPages()
050 lRet = objAcroPDDocNew.InsertPages(lPages - 1, _
051 objAcroPDDocAdd, 0, lGetNumPages, True)
052 lRet = objAcroPDDocAdd.Close()
053
054 '▼結合したPDFファイルを最後に保存する
055 lRet = objAcroPDDocNew.Save(1, sPath & "Test01_T.pdf")
056 lRet = objAcroPDDocNew.Close()
057 lRet = objAcroAVDoc.Close(1) '保存しないで閉じます。
058
059 Test_sub_Skip:
060 'PDFオブジェクトを強制解放する
061 Set objAcroAVDoc = Nothing
062 Set objAcroPDDocAdd = Nothing
063 Set objAcroPDDocNew = Nothing
064 End Sub
065
参考になれば幸いです。
管理様
早速の回答、ありがとうございます。
サンプルコード、動作することを確認いたしました。
コードはまだまったく理解出来ておりませんが、目的の機能をはたすものを作れるような気がしてきました。
とても独力ではできなかったと思われ感謝いたします。
またお世話になるかもしれませんがよろしくお願いいたします。
ぽん太 さんへ
参考になったみたいで良かったです。
管理人様
複数のtiffファイルを一つのpdfファイルする方法を御教示頂いた ぽん太です。
おかげさまで目的を達することが出来、改めて感謝いたします。
Acrobat関係は丸パクリなので後先になりますが各メソッドの勉強を始めています。 そこで教えて頂きたいことがありましたので、よろしくお願いいたします。
ファイル結合時の「しおり」について
通常、ハンドで結合処理をすると、OPTの「しおりを追加する」をオフにしない限り各ファイル名のしおりが設定されると思います。
今回提示頂いたコードで結合生成されたものには、その各ファイル名のしおりがありません。
InsertPages メソッドの解説には 第5引数(bBookmarks):しおりも追加する時はTrue(-1)。追加しない時はFalse(0)。とありますが、結合前ファイルをpdfにして試したところ、設定済みのしおりのみを引き継ぐようでした。
また、PDBookmark メソッド一覧には 「しおり」の新規追加機能は有りませんともあり、CPDFは私にはハードルが高すぎるように思えます。
結合前ファイルがpdf以外の場合(しおり無しのpdfも含み)、ファイル名をしおりとして設定する簡便な方法はあるのでしょうか?
なお、元々の目的からはしおり設定は必要ありません。単に勉強として知りたいだけですので、時間の都合がついた時でも回答頂けたら幸甚です。
ぽん太 さんへ。
遅くなりました。
「しおり」に関してはCPDF以外の手は無いです。
後は別の有償ツールになると思っています。
面倒ですが、CPDFをお使いください。
管理人様
CPDFで対応とのことですので、現状ではしおり作成のニーズはありませんが、今後状況を見てチャレンジしようと思います。
回答ありがとうございました。
パスワード付きのPDFファイルを開く事は出来ないのでしょうか?
os:Windows7 professional
acroabat:X standard
excel:2016
hide さん はじめまして。
Acrobat OLEを使ったPDF操作ではパスワード付きのPDFファイルを開く事は「出来ません」。
ただし、パスワード付きPDFを開く上での諸問題が無ければ、以下のツールが使用可能です。
・Qpdf : コマンドラインのPDFツール
・CPDF:メッチャ多機能なPDFのコマンドライン・ツール
ご検討ください。
管理人さん
有難う御座います。
フリーソフトとかを使用せずにexcel vba と acrobat oleだけで完結出来たらと…………残念です。
VBAでShellで開いたPDFに対してacrobat oleを使用して操作する事は可能でしょうか?
例えば、ページの削除とか
hide さんへ
>VBAでShellで開いたPDFに対して・・
「Shell」の部分でどの様なコマンドを実行するのかは不明ですが。
Acrobat OLEでのページ削除(DeletePages)、挿入(InsertPages)等は可能です。
ただ、Shell?で起動してAcrobatで画面表示されているPDFに対してはAcrobat OLEを使うのは無理だと思います。理由はShellで開いたAcrobat上のPDFはOLEの制御対象外だからです。
当ページの命令(メソッド)を使って開いたPDFでしか、Acrobat OLEは制御出来ません。の、はずです。
問題無い範囲で処理内容を教えて頂ければ、全体を通して、もっと的確な情報を分かる範囲でご提案出来るかもしれません。
管理人さん
レスが遅くなり申し訳ありません。
質問をし直させて頂きます。
やりたい事は
1、PW付きの複数のPDFファイルのPWを解除して保存
(PWは同一のものが設定されています)
2、保存したPDFファイル内で特定の文字列を含むページ以降
を削除後にPWを付けて別名を付けて保存
です。
フリーソフトを使用しないと言う制限があります。
OS等々については変わりありません。
os:Windows7 professional
acroabat:X standard
excel:2016
hide さんへ
最大に問題点は
「Acrobat環境にプログラミング操作でのパスワード処理が無い」
事です。
正確にはココのサイトにはそれに関する情報が無い、事。
再度、見直しましたがやはり解決策には至りませんでした。
その部分は別のソフト「フリーソフト」等に頼るしか無いと思っています。
Excel VBA+Windows APIでAcrobatのパスワード入力画面にパスワードを飛ばすことは可能かもしれませんが、実用面ではかなり不安定なのでオススメできません。
パスワード部分は別途で有償ツールを導入するしか手はないかもしれません。
最適な情報の提供が出来なく、残念です。
管理人
有難う御座います。
フリーソフトを使用しないでのPW解除は難しいのですね
2、保存したPDFファイル内で特定の文字列を含むページ以降
を削除後にPWを付けて別名を付けて保存
については如何でしょうか?
hide さんへ
「ページ単位での文字列検索」は以下を御覧ください。
AcroExch.PDTextSelect メソッド一覧
チョット分かりにくい内容ですが、サンプルは画面表示しながら動作します。それで確認ができます。
なお、処理の関係上、デスクトップ画面にPDFが表示されてしまいます。
これでは処理時間が非常に掛かります。
テストが完了したら、
lRet = objAcroApp.Show '(TEST用)
となってる部分を
lRet = objAcroApp.Hide
にして下さい。
タスクトレイ上にはアイコンが出ますが、処理速度は上がります。
「ページの削除」は DeletePages を使います。
サンプルで使い方が分かるはずです。
ご検証下さい。