« PDF作成の自動化・省力化 [3] (「名前を付けて保存」を外から操作するプログラムの改良版) | トップページ | PDF作成の自動化・省力化 [5] (CADのPDF化 : C言語部分) »

2009年6月30日 (火)

PDF作成の自動化・省力化 [4] (改良版CtrlSaveas.exeをVBから使う)

[3]のプログラム(CtrlSaveas.exe)をVB6から使います。

Shell関数でCtrlSaveas.exeを起動、ShellExecute関数で印刷を開始したあと、WaitForSingleObject関数でCtrlSaveas.exeの終了(すなわち印刷ジョブの終了)を待ちます
エクセルドキュメントの様にShellExecuteの中で印刷ジョブが終わってしまう場合も問題ない。
しかし、"自分の"印刷ジョブの終了を待つ仕様でないので、印刷ジョブを連続して投入する様な場合には問題があるかもしれない。

---------------------------------------------------------------------------

    doc = "PDF化対象ドキュメントファイルパス"
    pdf = "出力PDFファイルパス"
    dir = "......."
    pdfprinter = "いきなりPDF Professional"  ' PDF作成プリンタ名
   
    ctrlsaveas = ".....\CtrlSaveas.exe "
    ctrlsaveas = ctrlsaveas & """" & pdf & """"
    ctrlsaveas = ctrlsaveas & " 180 "     ' タイムアウト
    ctrlsaveas = ctrlsaveas & """" & pdfprinter & """"
    ProcessID = Shell(ctrlsaveas, vbNormalFocus)    ' VB関数
    ProcessHandle = OpenProcess(SYNCHRONIZE, True, ProcessID)   ' Win32 API
 
    ' 事前に通常使うプリンタをPDFプリンタに設定しておく。
    If ShellExecute(0, "print", doc, vbNullString, dir, SW_HIDE) > 0 Then       ' Win32 API
        WaitForSingleObject ProcessHandle, 180000   ' Win32 API
        CloseHandle ProcessHandle   ' Win32 API
    Else
        MsgBox "印刷実行でエラー: " & Str(GetLastError)
    End If

    Win32 API 関係の宣言をVB6の標準モジュールに記述しておく必要がある(VB6付属のWIN32API.TXTから関係する部分をコピーする)。また、VB6からプロセスを起動しプロセスハンドルを取得する方法についてはMSDNのドキュメント「[VB] Win32 アプリケーションを起動させ、終了させる方法」(文書番号: J043339)を参照しました。

« PDF作成の自動化・省力化 [3] (「名前を付けて保存」を外から操作するプログラムの改良版) | トップページ | PDF作成の自動化・省力化 [5] (CADのPDF化 : C言語部分) »

ソフトウエア」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: PDF作成の自動化・省力化 [4] (改良版CtrlSaveas.exeをVBから使う):

« PDF作成の自動化・省力化 [3] (「名前を付けて保存」を外から操作するプログラムの改良版) | トップページ | PDF作成の自動化・省力化 [5] (CADのPDF化 : C言語部分) »