AcroExch.PDDoc: Open メソッド

TOP > AcroExch.PDDoc > Open      [...]


説明

1つのPDFドキュメントをサイレント(画面に表示しない)で開く。

形式

VARIANT_BOOL Open(BSTR szFullPath);

引数

  1. 第1引数(BSTR szFullPath) :
    開くPDFファイルのフルパス。

戻り値

  • -1 : 成功。
  • 0 : 失敗。

動作するバージョン

VersionAdobe
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
8OKAcrobat 8.1.2 Pro + Excel 2003
9-Acrobat 9.5.2 Extended + Excel 2003
10OKAcrobat 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編)
 

 

 

補足

  1. OpenするPDFファイルはローカルのハードディスク上に存在する必要があります。
  2. OpenするPDFファイルにURLパスを指定すると、エラーコード(0) が返されます。
  3. 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

戻る

「AcroExch.PDDoc: Open メソッド」への15件のフィードバック

  1. 管理人様

    複数のtiffファイルを一つのpdfファイルにするアクロバットプロで行う作業をエクセルのVBAから行いたいと考えています。
    そもそもpdf以外のファイルを開くメソッドはなんなのでしょうか? Openではエラーになるようです。
    当方、VBAはそこそこ使えますがアクロバットを扱うのは初めてです。 ざっと本HPを眺めさせて頂きましたが分からず質問させていただきました。
    その他、本目的にあったヒントを頂ければ幸いです。
     使用環境
    ・Win7 ないし Win8
    ・Excel2010
    ・Acrobat X Pro

  2. ぽん太 さん
    はじめまして。

    サンプルを作ってみました。
    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

    参考になれば幸いです。

  3. 管理様

    早速の回答、ありがとうございます。
    サンプルコード、動作することを確認いたしました。
    コードはまだまったく理解出来ておりませんが、目的の機能をはたすものを作れるような気がしてきました。
    とても独力ではできなかったと思われ感謝いたします。
    またお世話になるかもしれませんがよろしくお願いいたします。

  4. 管理人様

    複数のtiffファイルを一つのpdfファイルする方法を御教示頂いた ぽん太です。
    おかげさまで目的を達することが出来、改めて感謝いたします。
     Acrobat関係は丸パクリなので後先になりますが各メソッドの勉強を始めています。 そこで教えて頂きたいことがありましたので、よろしくお願いいたします。

    ファイル結合時の「しおり」について
    通常、ハンドで結合処理をすると、OPTの「しおりを追加する」をオフにしない限り各ファイル名のしおりが設定されると思います。
     今回提示頂いたコードで結合生成されたものには、その各ファイル名のしおりがありません。
     InsertPages メソッドの解説には 第5引数(bBookmarks):しおりも追加する時はTrue(-1)。追加しない時はFalse(0)。とありますが、結合前ファイルをpdfにして試したところ、設定済みのしおりのみを引き継ぐようでした。
     また、PDBookmark メソッド一覧には 「しおり」の新規追加機能は有りませんともあり、CPDFは私にはハードルが高すぎるように思えます。
    結合前ファイルがpdf以外の場合(しおり無しのpdfも含み)、ファイル名をしおりとして設定する簡便な方法はあるのでしょうか?

    なお、元々の目的からはしおり設定は必要ありません。単に勉強として知りたいだけですので、時間の都合がついた時でも回答頂けたら幸甚です。

  5. ぽん太 さんへ。
    遅くなりました。

    「しおり」に関してはCPDF以外の手は無いです。
    後は別の有償ツールになると思っています。
    面倒ですが、CPDFをお使いください。

  6. 管理人様

    CPDFで対応とのことですので、現状ではしおり作成のニーズはありませんが、今後状況を見てチャレンジしようと思います。
    回答ありがとうございました。

  7. パスワード付きのPDFファイルを開く事は出来ないのでしょうか?

    os:Windows7 professional
    acroabat:X standard
    excel:2016

  8. 管理人さん

    有難う御座います。
    フリーソフトとかを使用せずにexcel vba と acrobat oleだけで完結出来たらと…………残念です。

    VBAでShellで開いたPDFに対してacrobat oleを使用して操作する事は可能でしょうか?
    例えば、ページの削除とか

  9. hide さんへ

    >VBAでShellで開いたPDFに対して・・
    「Shell」の部分でどの様なコマンドを実行するのかは不明ですが。

    Acrobat OLEでのページ削除(DeletePages)、挿入(InsertPages)等は可能です。
    ただ、Shell?で起動してAcrobatで画面表示されているPDFに対してはAcrobat OLEを使うのは無理だと思います。理由はShellで開いたAcrobat上のPDFはOLEの制御対象外だからです。
    当ページの命令(メソッド)を使って開いたPDFでしか、Acrobat OLEは制御出来ません。の、はずです。

    問題無い範囲で処理内容を教えて頂ければ、全体を通して、もっと的確な情報を分かる範囲でご提案出来るかもしれません。

  10. 管理人さん

    レスが遅くなり申し訳ありません。

    質問をし直させて頂きます。

    やりたい事は
    1、PW付きの複数のPDFファイルのPWを解除して保存
    (PWは同一のものが設定されています)
    2、保存したPDFファイル内で特定の文字列を含むページ以降
    を削除後にPWを付けて別名を付けて保存
    です。

    フリーソフトを使用しないと言う制限があります。
    OS等々については変わりありません。

    os:Windows7 professional
    acroabat:X standard
    excel:2016

  11. hide さんへ

    最大に問題点は
    「Acrobat環境にプログラミング操作でのパスワード処理が無い」
    事です。
    正確にはココのサイトにはそれに関する情報が無い、事。
    再度、見直しましたがやはり解決策には至りませんでした。
    その部分は別のソフト「フリーソフト」等に頼るしか無いと思っています。

    Excel VBA+Windows APIでAcrobatのパスワード入力画面にパスワードを飛ばすことは可能かもしれませんが、実用面ではかなり不安定なのでオススメできません。

    パスワード部分は別途で有償ツールを導入するしか手はないかもしれません。

    最適な情報の提供が出来なく、残念です。

  12. 管理人

    有難う御座います。
    フリーソフトを使用しないでのPW解除は難しいのですね

    2、保存したPDFファイル内で特定の文字列を含むページ以降
    を削除後にPWを付けて別名を付けて保存

    については如何でしょうか?

  13. hide さんへ

    「ページ単位での文字列検索」は以下を御覧ください。
    AcroExch.PDTextSelect メソッド一覧
    チョット分かりにくい内容ですが、サンプルは画面表示しながら動作します。それで確認ができます。
    なお、処理の関係上、デスクトップ画面にPDFが表示されてしまいます。
    これでは処理時間が非常に掛かります。
    テストが完了したら、
    lRet = objAcroApp.Show '(TEST用)
    となってる部分を
    lRet = objAcroApp.Hide
    にして下さい。
    タスクトレイ上にはアイコンが出ますが、処理速度は上がります。

    「ページの削除」は DeletePages を使います。
    サンプルで使い方が分かるはずです。

    ご検証下さい。

コメントを残す

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

CAPTCHA



SAMURAI Plugin

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

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



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

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