- PR -

VB.netでプリンタを指定してPDFを印刷したい

1
投稿者投稿内容
mak
会議室デビュー日: 2004/01/09
投稿数: 14
投稿日時: 2004-02-18 20:15
件名の通りなのですが、VB.NETにてプリンタ指定でPDFを印刷したいです。
プリンタを指定せずに印刷するのは過去ログを見てできました。
以下、そのソースです↓
 Dim proc As New Process

 proc.StartInfo.FileName = filePath
 proc.StartInfo.Verb = "Print"
 proc.StartInfo.CreateNoWindow = True
 proc.Start()
 proc.WaitForExit(20000)
 'プロセスが終了していなかったら終了する
 If proc.HasExited = False Then
  proc.Kill()
 End If
 'proc解放
 If Not proc Is Nothing Then
  proc.Dispose()
 End If

ですがこれでは通常使うプリンタで印刷されてしまいます。
今度は指定したプリンタで印刷をしたいのです。
見た限りではproc.StartInfoにプリンタ指定メソッドなども
無さそうなので困り果てています。

どうかよろしくお願いします。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-02-20 10:04
proc.StartInfoは、通常アプリケーションを実行するときのパラメータを設定するためのプロパティですので、ProcessクラスやProcessStartInfoクラスを見てもプリンターに関するメソッドやプロパティというものはありません。

.PDFファイルを起動パラメータに渡して何が行われるかというと、FileNameに指定されたファイルがアプリケーションで無かった場合、そのファイルが何かのアプリケーションに関連付けが行われているかOSがチェックしにいきます。

.PDFに関連付けられているアプリケーションを知る場合は次のようになります。
1.レジストリエディタ(regedit.exe)を起動します。
2.HKEY_LOCAL_MACHINE\SOFTWARE\Classesを開きます。
3. .pdf の項目を探します。
4. (規定)の項目をチェックします。(自分の環境ではAcroExch.Document)
5.今度は同じ場所でAcroExch.Documentを探します。
6.AcroExch.Document\Shellに書かれているPrintを見てください。

このPrintがStartInfo.Verbに指定している動詞です。
では実際この動詞が何をおこなっているかというと、Shell\Print\Commandの中に書かれています。

自分の環境では次のようになっています。(あ、6に上げてない。。。)
"C:\Program Files\Adobe\Acrobat 5.0\Reader\AcroRd32.exe" /p /h "%1"

つまり.pdfの拡張子が付いたファイルを起動すると、実際にはAcroRd32.exeが呼ばれていることになります。

では指定プリンターに直接出力するにはどうすればよいかというと、AcroRd32.exeにはプリンターを指定する引数があります。次の場所にあるAcrobatSDKのドキュメントの最後のページ書かれています。
http://support.adobe.co.jp/faq/faq/qadoc.sv?3821+001

ただしここに記述されているように、これらコマンドは正式にサポートされていないため注意が必要です。(自分もプリンター直指定は試したことがありませんので、やってみてください)
また自分のアプリケーションから起動するために、現状のようにファイル名を渡すのではなく、AcroRd32.exeを起動する必要があるので、レジストリからアプリケーションのパスを取得する必要もでてくるかもしれません。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-20 11:48
引用:

noderaさんの書き込み (2004-02-20 10:04) より:

これらコマンドは正式にサポートされていないため注意が必要です。(自分もプリンター直指定は試したことがありませんので、やってみてください)


 AcrobatReaderが終了せずに残ってしまったような気がする。。。
1

スキルアップ/キャリアアップ(JOB@IT)