Acrobat/DDE: FilePrintToEx

説明

PDFファイルを画面表示せずに、印刷ドライバー名と印刷ポート名を指定して全頁印刷します。

印刷の開始に関係無く直ちに次の命令は実行されます。

印刷時は印刷範囲に収まるようにサイズ変更されて印刷されます。

大量のPDFファイルの高速印刷処理に向いています。

注意事項有り

 

Canon BJ S600プリンターのプロパティ画面

  • 印刷ドライバー名 :"Canon BJ S600"
  • 印刷ポート名 :USB001 ※USBケーブルでパソコンとプリンターは接続されている

 

プリンターのプロパティ画面

 

形式

[FilePrintTo(char* fullPath, char* printName,
char* driverName, char* portName)]

 

引数

注意:第3引数の印刷ドライバー名「driverName」は要らないくても印刷出来る!

fullPath
[char*]
印刷するPDFファイルのフルパス
注意:パス中に空白があるときは注意する。
printName
[char*]
プリンター名
注意:パス中に空白があるときは注意する。
driverName
[char*]
印刷ドライバー名
注意:ドライバー名の途中に空白文字がある時はダブル引用符で囲む。
この引数は不要なのか?
portName
[char*]
印刷ポート名

 

戻り値

true 印刷に成功しました。
false fullPathによって指定されたPDFドキュメントが開かれてない。
又は失敗しました。

注)ExcelのVBAではDDE命令の発信ステートメント上で、戻り値を取得出来ません。

 


サンプル:ExcelのVBA

PDFドキュメントを表示せずに、印刷ドライバー名と印刷ポート名を指定して全頁印刷します。

  • Excel VBA開発環境をF8キーでステップ実行して動作確認します。
  • 以下の Sleep API は標準モジュール内に入れます。

 

Public Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)

Sub DDE_FilePrintToEx()

Dim lChanNo As Long ‘DDEチャンネル番号
‘パスに空白が入った時用にダブル引用符を付加

Const CON_PDF_PATH = """E:¥TEST-01.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, "[FilePrintToEx(" & CON_PDF_PATH & _
",""Canon BJ S600"",""Canon BJ S600"",USB001)]"
‘注:以下の形式でも印刷出来る。なぜ?
‘DDEExecute lChanNo, "[FilePrintToEx(" & CON_PDF_PATH & _
",""Canon BJ S600"",USB001)]"
‘Sleepで時間を稼がないと印刷出来ない。
Sleep 2000 ‘=2秒。1000からでもテストではOK

‘PDFを全て閉じ、Acrobatアプリケーション終了
DDEExecute lChanNo, "[AppExit()]" ‘Acrobatプロセスも消える
‘DDEチャネルを閉る
DDETerminate lChanNo
Debug.Print Now &
" DDE_FilePrintEx 完了"

End Sub

 

補足

  • 大量のPDFファイルを印刷するのに向いています。

 

注意事項

  • 第3引数「ドライバー名」は要らないみたいです。
  • 印刷ドライバー名に空白文字が入っている時はダブル引用符で囲まないと認識しません。
  • 印刷を待たずに直ぐにDDE制御が戻ります。
    つまり次の命令が実行されます。
    印刷が開始されるまでにDDEチャンネルを閉じる(AppExit)と当メソッドは無視されます。
    Sleep関数で印刷の開始されるまでの時間稼ぎをする必要があります。
    時間はパソコン環境等によって変わると予想されます。
  • 上記サンプルで、Sleep関数を外すして一気に実行すると、印刷されずに処理は完了してしまいます。

 

動作確認環境

  • 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.31.html 

 

TOPへ

コメントを残す

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

CAPTCHA