- PR -

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

投稿者投稿内容
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-23 17:23
度々すいません。
印刷、できました。。。納得できてないのですが。
前回のコーディング内容で↓の部分を省略したら印刷できました。
===============================================================
printProcess.StartInfo.Arguments = ADOBE_PATH + " /n /t ";
===============================================================

どういうことでしょう?
.StartInfo.Verb = "printto";の設定で指定されたファイルは何でも印刷
してしまい、実行ファイルの指定はいらないということでしょうか。

過去ログにもある、「プリンターを指定して印刷」の場合
===============================================================
printProcess.StartInfo.Arguments = ADOBE_PATH + " /n /t " + プリンター名;
===============================================================
が必要になると思うのですが、これを指定するとPDF起動のみで印刷が行われません。
出力するプリンターが1つなので結果オーライですが、
気持ちがすっきりしません。。。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2008-06-23 18:17
しばらく見ていなかったので流れを確認できていませんでしたが
最初はサーバで作成した PDF ファイルをクライアント側から印刷
させたいのかと思っていましたが、どうも違うようですね。
誤解していました。すいません。

引用:

Liquid_Forceさんの書き込み (2008-06-23 17:23) より:

印刷、できました。。。納得できてないのですが。
前回のコーディング内容で↓の部分を省略したら印刷できました。
===============================================================
printProcess.StartInfo.Arguments = ADOBE_PATH + " /n /t ";
===============================================================

どういうことでしょう?
.StartInfo.Verb = "printto";の設定で指定されたファイルは何でも印刷
してしまい、実行ファイルの指定はいらないということでしょうか。

過去ログにもある、「プリンターを指定して印刷」の場合
===============================================================
printProcess.StartInfo.Arguments = ADOBE_PATH + " /n /t " + プリンター名;
===============================================================
が必要になると思うのですが、これを指定するとPDF起動のみで印刷が行われません。
出力するプリンターが1つなので結果オーライですが、
気持ちがすっきりしません。。。


これを見る限りでは、Arguments プロパティと FileName プロパティ
の内容が逆のような気がします。

ProcessStartInfo の説明によれば、FileName プロパティは
> 起動するアプリケーションまたはドキュメントを取得または設定します。
とありますし、Arguments プロパティは
> アプリケーションを起動するときに使用するコマンド ライン引数のセットを取得または設定します。
とあります。
このコードでは、FileName プロパティに「コマンドライン引数」を
渡し、Arguments プロパティに「起動するアプリケーション」を指定
しているような気がします。

Arguments プロパティの指定を削除すると印刷できるのは、FileName プロパティの
> 起動するアプリケーションまたはドキュメントを取得または設定します。
の部分で、アプリケーションではなくドキュメントを設定していること
になるからでしょう。
つまり、PDF ファイル名(と Verb プロパティ)を設定して起動させること
によって、.pdf の拡張子に関連づけられたプログラム(この場合は Adobe Reader )
が起動し、Verb プロパティの内容によって印刷する処理を行っているのだと
思われます。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-23 20:36
ぽぴ王子さん 回答ありがとう御座います。

>つまり、PDF ファイル名(と Verb プロパティ)を設定して起動させること
によって、.pdf の拡張子に関連づけられたプログラム(この場合は Adobe Reader )
が起動し、Verb プロパティの内容によって印刷する処理を行っているのだと
思われます。

なるほど!納得です。ファイルが関連付けされていますからね。

しかし、FileNameとArgumentsの部分は私もMSDNなど読んで
ご指摘の通りと解釈しているのですが、プログラムを逆に設定すると
「指定されたファイルは関連付けれた起動ファイルがありません」のような
エラーが発生してしまうのです。

なぞです。(おそらく私の指定の仕方が悪いとおもうのですが。。。)

printProcess.StartInfo.FileName = ←ここにADBEのフルパスを設定
printProcess.StartInfo.Verb = "printto";
printProcess.StartInfo.Arguments = " /n /t " + 印刷対象のファイルパス;

この状態でエラーが。。。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2008-06-23 23:02
引用:

Liquid_Forceさんの書き込み (2008-06-23 20:36) より:

しかし、FileNameとArgumentsの部分は私もMSDNなど読んで
ご指摘の通りと解釈しているのですが、プログラムを逆に設定すると
「指定されたファイルは関連付けれた起動ファイルがありません」のような
エラーが発生してしまうのです。


私も調べてみました。

結論から言うと Verb プロパティに設定している「printto」がダメです。
手持ちの環境では Adobe Reader 8.1 がインストールされていますが、これには
printto というアクションは存在しません。
存在しないアクションを設定しているのでエラーになります。

アクション設定の確認方法はこちらを参照してください。
http://www.atmarkit.co.jp/fwin2k/win2ktips/482ftype/ftype.html

あと、Adobe Reader のオプションはこちらを参照するといいと思います。
http://scripting.cocolog-nifty.com/blog/2007/07/adobe_reader_81_e41e.html

加えて、ファイル名はダブルクォーテーションで囲んだ方がいいですね。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-24 10:41
ぽぴ王子さん こんにちわ。

できました!
ご指摘のファイルに対するアクションを調べて試してみました。

【結果】
@ファイルに新規でアクション「printto」を追加して、
 プログラムのVerbプロパティに「printto」を指定してもNG!
 「指定されたファイルは関連付けれた起動ファイルがありません」エラー

A既存で登録されているアクション「open」を
 プログラムでVerbプロパティに「open」を指定したらOK!

※プリンター指定もできました(以下Program)
======================================================================
Process printProcess = new Process();
string filePath = null;

filePath = "C:\\990000010_0_12.pdf";
printProcess.StartInfo.FileName = "AcrobatReader.exeのフルパス";
printProcess.StartInfo.Verb = "open";

printProcess.StartInfo.Arguments = " /n /t " + filePath + " \\\\Network01\\HP LaserJet 8150 PCL";
printProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
printProcess.StartInfo.CreateNoWindow = true;
printProcess.Start();

printProcess.WaitForExit(1500);
======================================================================
ありがとうございました!

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