Acrobat/DDE: DocPrint

説明

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へ

コメントを残す

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

CAPTCHA


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