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