- PR -

C#(.NET)でのPDFコマンド印刷について

投稿者投稿内容
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-21 00:42
こんにちは。

C#(VS2008)でWebフォーム開発をしています。
PDFファイルをコマンド印刷したく、VB.NETでは過去ログなどを調べて以下の
プログラミングで確認できました。
=========================================================================
Dim pro As New Process()
Dim procID As Integer

Dim filepath As String = "C:\TokyoMetoroNetwork.pdf"

procID = Shell("C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe" & " /n /t " & filepath)
pro = Process.GetProcessById(procID)
pro.WaitForExit(3000)
pro.Kill()
=========================================================================

ここで使用しているProcess()とShell()はC#でやるにはどのようにしたら
良いのでしょうか?ご教示下さい。

Processは「System.Diagnostics」をusingすればよさそうですが
Shellは「Microsoft.VisalBasic.Ineraction.Shell()」が見つかりません。

宜しくお願いいたします。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2008-06-21 06:23
引用:

Liquid_Forceさんの書き込み (2008-06-21 00:42) より:

ここで使用しているProcess()とShell()はC#でやるにはどのようにしたら
良いのでしょうか?ご教示下さい。


どちらも Process クラスを使用してできますよ。
Shell メソッドも Microsoft.VisualBasic.Interaction にありますけど。

それより大丈夫でしょうか。
Web ということは、Web サーバーでこれを実行するわけですよね。
当然 PDF はクライアントには出力されませんし、サーバーでのプリンタの設定
やらユーザーの権限やら複雑に絡んでくると思うのですが。
そもそもクライアントに PDF を出力しようとしてこういった処理を書いたので
あれば、筋違いだと思いますよ。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-21 10:52
ぽぴ王子さん、回答ありがとうございます!

仰るとおり、WebServerに1つPrinterDriverをインストールして、
通常出力として1箇所に出力する予定です。
ネットワークプリンターはDriverをインストールするとして、
ユーザー権限とおっしゃるのはNTFSアクセス権限の
「IUSER_マシン名」や「Network Service」のIISに関係するところのことでしょうか。

プリンターに対しても上記の権限が関係してくるのであれば
ご教示いただけないでしょうか?

サーバーはWindows2003Serverです。
宜しくお願い致します。
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-21 11:38
こんにちわ。引き続きお願いします。

System.Diagnosticsを使ってプロセスを起動使用と思ったんですが、
VB.NETだとビルとエラーはなかったのですが、C#でVB.NETと同様に
Microsoft.VisualBasicのDLLを取り込んで
「Microsoft.VisualBasic.Interaction.Shell()」を使用するとエラーと
なってしまいます。

オブジェクトブラウザーではShellの第2引数以降は省略可能とあるのですが、
C#でVBのShellメソッドに変わるものは何かわからず困っているので
お願いします。
※そもそもC#でMicrosoft.VisualBasicを取り込むこと自体が無謀ですよね?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-06-21 22:49
引用:

Liquid_Forceさんの書き込み (2008-06-21 11:38) より:

System.Diagnosticsを使ってプロセスを起動使用と思ったんですが、VB.NETだとビルとエラーはなかったのですが、C#でVB.NETと同様にMicrosoft.VisualBasicのDLLを取り込んで「Microsoft.VisualBasic.Interaction.Shell()」を使用するとエラーとなってしまいます。


省略可能な Optional 引数の部分には System.Reflection.Missing.Value を指定してください。 別にわざわざ Shell メソッドを使う必要はありません。

引用:

オブジェクトブラウザーではShellの第2引数以降は省略可能とあるのですが、C#でVBのShellメソッドに変わるものは何かわからず困っているのでお願いします。
※そもそもC#でMicrosoft.VisualBasicを取り込むこと自体が無謀ですよね?


既に回答があるとおり、.NET Framework 的には System.Diagnostics.Process.Start メソッドがそれに当たります。

# Web アプリケーションではあまり使わないと思いますけど。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-23 12:39
じゃんぬねっとさん回答ありがとう御座います!

Process.startメソッドでPDFの起動ができました。
しかしながら印刷されずにPDFのウィンドウが閉じてしまいます。
以下の記述でおかしなところがありますでしょうか。
ご教示下さい。
=====================================================================
Process printProcess = new Process();
string filePath = null;

try
{
filePath = "C:\\test\\990000010_0_12.pdf";
printProcess =
System.Diagnostics.Process.Start(
filePath, Definition.ADOBE_PATH + " /n /t ");

printProcess.WaitForExit(3000);
printProcess.Kill();
}
catch
{
throw;
}
finally
{
if (!printProcess.HasExited)
{
printProcess.Kill();
printProcess.Dispose();
}
}
=====================================================================
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-23 12:42
あ、すみません。
途中の「Process.Start(filePath, Definition.ADOBE_PATH + " /n /t");」
にある"Definition.ADOBE_PATH"はacrobatReaderのexeフルパスです。
宜しくお願いします。
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-23 16:58
こんにちは。

調べてみてやり方を以下のように変えてもやはり指定したPDFファイルが
起動するだけで印刷まで実行されません。
PCにインストールしているプリンターはネットワーク共有プリンターに
「通常使うプリンターに指定」をしています。

試しにコマンドプロンプトからコマンドを発行したら問題なく印刷されました。
すみませんが、どなたかご教示下さい。
==========================================================================
printProcess.StartInfo.FileName = filePath;
printProcess.StartInfo.Verb = "printto";
printProcess.StartInfo.Arguments = ADOBE_PATH + " /n /t ";
printProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
printProcess.StartInfo.CreateNoWindow = true;
printProcess.Start();

printProcess.WaitForExit();
==========================================================================

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