説明
PDFファイルを画面にオープン表示して、印刷ダイアログボックスを表示します。
印刷ダイアログボックスを表示すると、印刷に関係無く次の命令は直ちに実行されます。
高速処理に向いています。
※注意事項有り。
形式
[FilePrintEx(char* fullPath)]
引数
fullPath [char*] |
印刷ダイアログボックスを表示するPDFファイルのフルパス 注意:パス中に空白があるときは注意する。 |
戻り値
true | 印刷ダイアログボックスの表示に成功しました。 |
false | fullPathによって指定されたPDFドキュメントが開かれてない。 又は失敗しました。 |
注)ExcelのVBAではDDE命令の発信ステートメント上で、戻り値を取得出来ません。
サンプル:Excel のVBA
PDFドキュメントを開いて、印刷ダイアログボックスを表示します。
印刷ダイアログボックスで印刷内容を設定して印刷します。
- Excel VBA開発環境をF8キーでステップ実行して動作確認します。
- 以下の Sleep API は標準モジュール内に入れます。
SourceConverterPublic Declare Sub Sleep Lib “kernel32” _
(ByVal dwMilliseconds As Long)
Sub DDE_FilePrintEx()
Dim lChanNo As Long ‘DDEチャンネル番号
‘パスに空白が入った時用にダブル引用符を付加
Const CON_PDF_PATH = “””E:¥Test01.pdf”””
‘Acrobatアプリケーション起動。どちらもテストOK。
Shell “C:¥Program Files¥Adobe¥Reader 9.0¥Reader¥AcroRd32.exe”
‘Shell “C:¥Program Files¥Adobe¥Acrobat 8.0¥Acrobat¥Acrobat.exe”
‘DDEチャンネルのオープン
lChanNo = DDEInitiate(“Acroview”, “Control”)
‘PDFファイルをオープンして、印刷ダイアログを表示
DDEExecute lChanNo, “[FilePrintEx(“ & CON_PDF_PATH & “)]”
‘印刷ダイアログを表示したら、次の命令は実行します
‘Acrobat(Acrobat Reader)アプリケーションが残る可能性が有り
‘Sleepで時間を稼がないと印刷出来ない。
Sleep 2000 ‘=2秒。1秒でもテストではOK
‘PDFを全て閉じ、Acrobatアプリケーション終了
DDEExecute lChanNo, “[AppExit()]” ‘Acrobatプロセスも消える
‘DDEチャネルを閉る
DDETerminate lChanNo
End Sub
補足
- Adobe Readerを使っての自動印刷に関しては、メモリ上にプロセスが残るという問題をよく目にしますが、上記サンプルはプロセスは残りません。
Adobe Reader v9.1.0では当問題は発生しません。
注意事項
※これに関する明記はSDKに見あたりませんでした。
- 印刷ダイアログボックスが表示されるまで待たずに直ぐにDDE制御が戻ります。
つまり次の命令が実行されます。
印刷ダイアログボックスが表示されるまでにDDEチャンネルを閉じる(AppExit)と当メソッドは無視されます。
よって、Sleep関数で印刷ダイアログボックスが表示されるまでの時間稼ぎをする必要があります。
時間はパソコン環境等によって変わると予想されます。 - 上記サンプルで、Sleep関数を外すと、印刷ダイアログボックスも表示されずに処理は完了してしまいます。
- 次のPDF印刷までに処理時間が掛かる処理を行いたい時に、このFilePrintExメソッドを利用します。
つまり高速処理を狙ったメソッドです。
動作確認環境
- WindowsXP + SP3 + WindowsUpdate
Adobe Acrobat Pro 8.1.4 + Office Pro 2003
Adobe Reader 9.1.0 + Office Pro 2003
Adobe社の解説ページ : 英語
以下がAdobe社のAcrobat DDEの解説ページです。
表示には時間がかかります。
http://livedocs.adobe.com/acrobat_sdk/9/Acrobat9_HTMLHelp/IAC_API_DDE_Messages.104.27.htm
< TOPへ >