概要

Demo

PDF 使ってますか?

わたしは使ってません

ブラウザで不用意にリンクをクリックして、それが PDF だと分かったときの してやられた感には、いまだにベホマでも回復しきれないダメージを受けます。

ま、そんなことはどうでもいいんですが、世間一般的には PDF を扱う機会が多いようで、Access から PDF 文書を開いたり印刷したりするニーズは確実に増えているようです。

単純に開くだけならハイパーリンクでも使えばいいんですが、ときにハイパーリンクではできない、開いて何かしたいという状況も考えられます。

PDF を扱えるアプリケーションはいろいろありますが、メジャーなのはやはり開発元である Adobe 製品です。PDF の編集がしたいとか、複雑な操作がしたいということになると、有償製品である Adobe Acrobat が必要になります。Acrobat ならオートメーションにも対応しているので、VBA から制御可能です。この辺は、公式・非公式とりまぜて情報がたくさんありますし、どっちかというと Access と関係ない Acrobat SDK の話なので、各自好きなように検索してください。ここでは取り扱いません。

一方、無償配布されている Adobe Reader は、編集等の高度な機能こそありませんが、とにかく無償なので Acrobat とくらべてかなり広範に普及しているといえます。企業によってはプレインストールしているので、Acrobat はないけど Adobe Reader なら全端末で標準使用可なんてケースもあります。

Adobe Reader は機能的には読むだけ開くだけ、なんですが、実はコマンドライン オプションが用意されているので、ちょっとした操作なら Adobe Reader だけでも可能な場合があります。

少し例を挙げると、

などです。

とは言え、コマンドライン?それウマイのか? な VBA ノービス ユーザの方々にとっては、そんなことを言われても「おいおい、俺にどうしろっていうんだぁ?」の世界でしょう。

そこで今回は、Adobe Reader の起動操作を VBA から扱いやすくラッピングした関数、OpenPdfPrintPdf をご紹介します。面倒な PDF の取り扱いに切れそうになったら、思い出してやってください。

ちなみに、わたしの個人環境では PDF は Foxit Reader に関連付けられており、Adobe Reader を使う機会はまずありません。今回この関数を作成するため久しぶりに起動しましたが、なにぶん ふだん使わないものなので仕様や実装におかしな点があるかもしれません。お気づきの点があればご意見フォーム経由でお知らせください。

ダウンロード

サンプルのダウンロードは下記からどうぞ。

現在の最新バージョンは 1.1.0 です。

※ ダウンロードができない場合は、フォルダーへのダイレクト リンクからお試しください。

Access 2000 形式 MDB ファイルと Excel ワークブック、Word 文書を ZIP 圧縮しています。Windows XP 以降の OS 上であれば、特に外部ソフトを使わず解凍できます。

Windows XP 未満の OS で解凍用のソフトが無い場合は、Vector 等のソフトウェアライブラリから入手する必要があります。

使い方

1. モジュールのインポート

組み込み対象の MDB に、サンプルから以下のモジュールをインポートしてください。

2. 参照設定の確認

不要です。標準の VBA ライブラリといくつかの OS 付属 DLL 以外は、使用しません。

3. PDF 文書を開く

OpenPdf 関数で、PDF 文書を開きます。

以下に基本的な使用例を示します。

OpenPdf 関数は実行時エラーを発生させる場合があるため、呼び出し側では必ずエラーをハンドリングしてください。

標準モジュールのため、「OpenPdf」の記述だけでも動作しますが、分かりやすさの点からモジュール名で修飾した「AdobeReader.OpenPdf」を推奨します。

引数は将来的に拡張される可能性があるため、名前付きで指定することを推奨します。

引数の詳細は OpenPdf 関数 を参照してください。

4. PDF 文書を印刷する

PrintPdf 関数で、PDF 文書を印刷します。

以下に基本的な使用例を示します。

PrintPdf 関数は実行時エラーを発生させる場合があるため、呼び出し側では必ずエラーをハンドリングしてください。

標準モジュールのため、「PrintPdf」の記述だけでも動作しますが、分かりやすさの点からモジュール名で修飾した「AdobeReader.PrintPdf」を推奨します。

引数は将来的に拡張される可能性があるため、名前付きで指定することを推奨します。

引数の詳細は PrintPdf 関数 を参照してください。

OpenPdf 関数

機能

Adobe Reader を使用して、PDF 文書を開きます。

構文

OpenPdf(FilePath[, Page[, Comment[, Zoom[, PageMode[, ScrollBar[, Search[, ToolBar[, NavPanes[, View[, WindowStyle]]]]]]]]]])

以下で各引数について説明します。

FilePath

必ず指定します。対象となる PDF 文書のパスを指定します。

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

FilePath

Page

省略可能です。文書を開いたときに、移動したいページ番号 (先頭ページ 1 〜) を指定します。

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

Page

Comment

省略可能です。文書を開いたときに、移動したいコメント ID を指定します。

この引数は、必ず Page 引数とセットで指定してください。Page 引数が指定されなかった場合、Comment 引数の指定は無視されます。

なお筆者はコメントが記入された PDF 文書を持っていないため、この機能はテストされていません。使用画像もありません。

Zoom

省略可能です。文書の表示倍率を指定します。単位はパーセントです。省略時は環境設定に従います。

「100」を指定すると、100% を意味します。

Zoom 引数と View 引数に矛盾する指定が行われた場合、実装の関係で View 引数が優先されます。しかし、そのようなあいまいな状況はできる限り避けてください。

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

Zoom

また「scale, left, top」形式で、垂直、水平方向のスクロール量も同時に指定することができます。たとえば「"100,180,150"」を指定した場合は、倍率 100% で、文書の左位置 180 ピクセル、上位置 150 ピクセルをウィンドウの左上隅として表示します。

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

Zoom2

PageMode

省略可能です。文書を開いたときに、サムネイルまたは しおり を表示するか指定します。省略時はどちらも表示されません。

PageMode 引数の指定には以下の列挙定数を使用できます。

定数説明
oppmNone0省略時の既定値です。どちらも表示しません。
oppmBookmarks1しおりを表示します。
oppmThumbs2サムネールを表示します。

上記構文で Acrobat Reader 7.0 のガイドを開いた状態が、下記になります。

PageMode

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

PageMode2

ScrollBar

省略可能です。文書を開いたときに、スクロールバーを表示するかどうかを指定します。

省略時は自動になります。

True を指定すると表示、False を指定すると非表示です。

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

ScrollBar

省略可能です。文書を開いたときに検索する語句を指定します。

半角スペースで区切ることによって、複数の検索語句を指定できます。

検索して最初に該当語句が見つかったページに移動し、検索語句がハイライト表示されます。

また検索ウィンドウが別に開き、検索結果の一覧が表示されます。

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

Search

ToolBar

省略可能です。文書を開いたときに、ツールバーを表示するかどうかを指定します。

True を指定すると表示、False を指定すると非表示です。省略時は自動になります。

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

ToolBar

省略可能です。文書を開いたときに、ナビゲーションパネルを表示するかどうかを指定します。

True を指定すると表示、False を指定すると非表示です。省略時は非表示になります。

なお、PageMode 引数でしおりかサムネールの表示が指定された場合は、NavPanes 引数の指定は無視され、常に表示されます。

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

NavPanes

View

省略可能です。文書を開いたときの表示オプションを指定します。省略時は環境設定に従います。

View 引数の指定には以下の列挙定数の組み合わせを使用できます。

定数説明
opvNone0省略時の既定値です。特に指定しません。
opvFitPage1全体表示します。
opvFitWidth2幅に合わせて表示します。
opvFitHeight3高さに合わせて表示します。
opvFitVisible4描画領域の幅に合わせて表示します。
opvRotateRight16右に90°回転します。
opvRotateLeft32左に90°回転します。

Zoom 引数と View 引数に矛盾する指定が行われた場合は、実装の関係で View 引数が優先されます。しかし、そのようなあいまいな状況はできる限り避けてください。

※ モジュール バージョン 1.1.0 で Adobe Reader 9 に対応しました (情報提供 IMA さん, Thanks!)。

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

View

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

View2

WindowStyle

省略可能です。文書を開いたときのウィンドウの状態を指定します。

この引数は、内部的に使用している Shell 関数の第二引数 windowstyle と同一です。詳細は VBA のヘルプにて Shell 関数のトピックを参照してください。

省略時は vbNormalFocus が使用されます。

戻り値

戻り値は、内部的に呼び出している Shell 関数の戻り値と同一 (タスク ID) になります。

Adobe Reader の実行に問題が発生した場合は、0 を返します。

PrintPdf 関数

機能

Adobe Reader を使用して、PDF 文書を印刷します。

構文

PrintPdf(FilePath[, PrinterName[, DriverName[, PortName[, ShowPrintSettings]]]])

以下で各引数について説明します。

FilePath

必ず指定します。対象となる PDF 文書のパスを指定します。

印刷時には、ウィンドウは表示されません。また印刷後、Adobe Reader は自動的に終了します。

PrinterName

DriverName

PortName

省略可能です。印刷に使用するプリンタ名、ドライバ名、ポート名を指定します。

省略時には、既定のプリンタで印刷されます。

ポート名 には "/" という文字を含まないようにしてください。

印刷時には、ウィンドウは表示されません。また印刷後、Adobe Reader は自動的に終了します。

ShowPrintSettings

省略可能です。印刷設定ダイアログを表示するかどうかを指定します。

True を指定すると表示、False を指定すると非表示です。

省略時には、印刷設定ダイアログを表示しません。

True を指定して印刷設定ダイアログを表示した場合、ウィンドウが表示されます。また印刷後、Adobe Reader は自動的に終了しません

上記構文で Acrobat の販促資料を開いた状態が、下記になります。

ShowPrintSettings

戻り値

ShowPrintSettings 引数に True を設定した場合の戻り値は、内部的に呼び出している Shell 関数の戻り値と同一 (タスク ID) になります。Adobe Reader の実行に問題が発生した場合は、0 を返します。

ShowPrintSettings 引数に False を設定するか、あるいは省略した場合の戻り値は、内部的に呼び出している ShellExecute API 関数の戻り値と同一になります。詳細については、ShellExecute を参照してください。

よくある質問

Excel や Word でも使いたいのですが

数箇所変更が必要ですが、Excel や Word でも使用できます。

標準モジュールだけですが、サンプルに Excel 版と Word 版も同梱してみましたので、ダウンロードしてください。

ただし例によって動作確認していませんので、もし動かなければご意見フォーム経由でお知らせください。

使用上の注意

バージョン 1.0.0 の開発とテストは Windows XP HE SP3 + Adobe Reader 8.1.5 で行われています (使い方で示したスクリーン キャプチャはすべてそのときのものです)。

バージョン 1.1.0 の開発とテストは Windows XP HE SP3 + Adobe Reader 9.3.4 で行われています。

上記以外の環境では一切 動作確認されていません。

Adobe Reader はバージョンによってコマンドライン スイッチが変更されたり、UI の変更によってコマンドライン スイッチが無効になるケースが過去に何度も発生しています。作者はふだん Adobe Reader を使用する機会がほとんどなく、互換性を維持するために必要な知識も持ち合わせていませんので、環境によっては動作しない可能性がじゅうぶん考えられます。

使用する場合は、事前にリリース環境において独自にテストを行うようにしてください。

動作しない環境を見つけた場合は、ご意見フォーム経由でお知らせいただければ今後の参考にさせていただきます。

本関数の使用に伴って発生するいかなる損害も担保しません。改変・使用・再頒布は自由ですが、ソースコード内のコメントは削除しないでください。

参考情報

Adobe Reader のコマンドライン スイッチについては、下記資料を参考にさせていただきました。

ありがとうございました。

sks blog » Adobe Readerにパラメータを渡してPDFファイルを開く(PDF Open Parameters)

Acrobat および Adobe Reader のコマンドラインオプション

Windows のコマンドラインから Acrobat や Adobe Reader を使用して印刷する方法 « PDF

更新履歴