C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: PDFファイル印刷後、Adobe Readerが閉じてないで


(過去ログ 21 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■8305 / inTopicNo.1)  PDFファイル印刷後、Adobe Readerが閉じてないで
  
□投稿者/ mxh (1回)-(2007/09/27(Thu) 16:30:04)

分類:[.NET 全般] 

2007/09/27(Thu) 16:49:17 編集(投稿者)
はじめまして。
vb.netでクライアント側の帳票印刷を開発中です。

印刷ボタンを押下後、先にPDFファイルを作成し、更に作成されたPDFファイルを印刷します。
今はPDFを印刷後、Adobe Readerアプリケーションが終了してないです。
※複数帳票を同時に作成、印刷する。

           'サーバ上作成されたPDFファイルを取得する。
            strFilePath ← フォルダパス
            strFilename ← PDFファイル名
           'フォルダ内のPDFファイルを印刷します。
            Do While strFilename <> ""
                Dim proc As ProcessStartInfo = New ProcessStartInfo
                proc.FileName = strFilePath & strFilename
                proc.Verb = "Print"
                proc.CreateNoWindow = True
                Dim p As Process = Process.Start(proc)
                p.WaitForExit()

                'プロセスが終了していなかったら終了する 
                If p.HasExited = False Then
                    p.Kill()
                End If


                'proc解放 
                If Not proc Is Nothing Then
                    p.Dispose()
                End If
                '印刷済みのファイルを削除する。
                Kill(strFilePath & strFilename)
                strFilename = Dir()
            Loop

上記の通りにコードを書いておりますが。
ご指導の程宜しくお願い致します。


引用返信 編集キー/
■8306 / inTopicNo.2)  Re[1]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ ひろ (55回)-(2007/09/27(Thu) 17:10:39)
No8305 (mxh さん) に返信

#間違っているかもしれませんので、思考のヒントにでも。

ProcessStartInfo.FileName に指定しているのは「PDFファイル」(データ)ですよね。
これで Process.Start すると、プロセスはどういう動きになるのかな?

Adobe Reader は、OSで管理されている「ファイルの関連づけ」で起動していると思われ。
ってことはこのプロセスを起こしているのは「OS」?

それは、mxh さんがプログラムで生成した(期待していた) Process と同じ?
対象が違えば Kill しているつもりでも Kill 出来てないという考え。

ProcessStartInfo.Filename に Adobe Readerの実行ファイル+オプションを設定すればいいのかな?
(出来るかどうかは判りませんが…)


引用返信 編集キー/
■8309 / inTopicNo.3)  Re[2]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ mxh (2回)-(2007/09/27(Thu) 17:55:24)
No8306 (ひろ さん) に返信
ひろ さん
ご返信有難う御座います。
申し訳御座いません、こちらはまだ初心者ですので、
なかなかうまく説明できません。
多分ご指摘の通りです。
印刷すると、AcroRd32.exeのプロセスが起動されています。
これをkillしてから、次の帳票を起動し、印刷すると思っております。



> ■No8305 (mxh さん) に返信
>
> #間違っているかもしれませんので、思考のヒントにでも。
>
> ProcessStartInfo.FileName に指定しているのは「PDFファイル」(データ)ですよね。
> これで Process.Start すると、プロセスはどういう動きになるのかな?
>
> Adobe Reader は、OSで管理されている「ファイルの関連づけ」で起動していると思われ。
> ってことはこのプロセスを起こしているのは「OS」?
>
> それは、mxh さんがプログラムで生成した(期待していた) Process と同じ?
> 対象が違えば Kill しているつもりでも Kill 出来てないという考え。
>
> ProcessStartInfo.Filename に Adobe Readerの実行ファイル+オプションを設定すればいいのかな?
> (出来るかどうかは判りませんが…)
>
> ひろ さん
引用返信 編集キー/
■8789 / inTopicNo.4)  Re[3]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ mxh (3回)-(2007/10/10(Wed) 11:17:17)
まだ解決できないです。
ご指導お願い致します。
引用返信 編集キー/
■8846 / inTopicNo.5)  Re[4]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ やじゅ (1回)-(2007/10/11(Thu) 12:48:37)
2007/10/11(Thu) 12:53:53 編集(投稿者)

>p.WaitForExit()

ってアプリケーションを終了するまで待つ命令ですよね
ご自身で閉じるボタン押さないかぎり、自動では閉じな
いと思われるため、次の処理に行かない気がします。

下記あたりが参考になるかな
コマンドラインでPDFファイルを印刷する。
http://scripting.cocolog-nifty.com/blog/2006/12/pdf_4c95.html

(C#)AcrobatReaderを使って印刷した結果が成功か失敗かを取得したい
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37353&forum=7

引用返信 編集キー/
■8862 / inTopicNo.6)  Re[5]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ Hirotow (101回)-(2007/10/11(Thu) 17:12:40)
Hirotow さんの Web サイト
WaitForExitを使うとそのプロセスが終了するまで待つのでAcrobatReaderが勝手に終了しない限りはそこで固まります。
なので、楽に組みたいのであれば普通にStartしたあとThread.Sleepで一定時間待ったほうがいいと思います。

FindWindowだかを使ってする場合WindowControlerというライブラリを使うと駱駝と思います。
引用返信 編集キー/
■8870 / inTopicNo.7)  Re[6]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ mxh (4回)-(2007/10/11(Thu) 22:49:24)
No8862 (Hirotow さん) に返信
> WaitForExitを使うとそのプロセスが終了するまで待つのでAcrobatReaderが勝手に終了しない限りはそこで固まります。
> なので、楽に組みたいのであれば普通にStartしたあとThread.Sleepで一定時間待ったほうがいいと思います。
>
> FindWindowだかを使ってする場合WindowControlerというライブラリを使うと駱駝と思います。
Hirotowさん
ご返信有難う御座います。

最初Thread.Sleepの方法でやっていましたが、
印刷帳票の枚数が多い場合、または途中別のユーザはプリンタを使うと、
印刷途中に終了してしまいました。
(やり方法は間違いました?)

教えて頂いたWindowControlerについては、
あまり分かりませんが、調べてみます。
有難う御座います。
引用返信 編集キー/
■8871 / inTopicNo.8)  Re[5]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ mxh (5回)-(2007/10/11(Thu) 22:55:11)
No8846 (やじゅ さん) に返信
> 2007/10/11(Thu) 12:53:53 編集(投稿者)
>
> >p.WaitForExit()
>
> ってアプリケーションを終了するまで待つ命令ですよね
> ご自身で閉じるボタン押さないかぎり、自動では閉じな
> いと思われるため、次の処理に行かない気がします。
>
> 下記あたりが参考になるかな
> コマンドラインでPDFファイルを印刷する。
> http://scripting.cocolog-nifty.com/blog/2006/12/pdf_4c95.html
>
> (C#)AcrobatReaderを使って印刷した結果が成功か失敗かを取得したい
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37353&forum=7
> やじゅ さん
ご返信有難う御座います。
教えて頂いた情報を参照してやってみます。
引用返信 編集キー/
■8906 / inTopicNo.9)  Re[7]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ Hirotow (104回)-(2007/10/12(Fri) 20:19:34)
No8870 (mxh さん) に返信
> ■No8862 (Hirotow さん) に返信
>>WaitForExitを使うとそのプロセスが終了するまで待つのでAcrobatReaderが勝手に終了しない限りはそこで固まります。
>>なので、楽に組みたいのであれば普通にStartしたあとThread.Sleepで一定時間待ったほうがいいと思います。
>>
>>FindWindowだかを使ってする場合WindowControlerというライブラリを使うと駱駝と思います。
> Hirotowさん
> ご返信有難う御座います。
>
> 最初Thread.Sleepの方法でやっていましたが、
> 印刷帳票の枚数が多い場合、または途中別のユーザはプリンタを使うと、
> 印刷途中に終了してしまいました。
> (やり方法は間違いました?)
>
> 教えて頂いたWindowControlerについては、
> あまり分かりませんが、調べてみます。
> 有難う御座います。

Thread.Sleepのほうは正常実行であれば確実に終わるだろうという時間待って終了するパターンなので枚数によって時間を変えるなどしたほうが効率が良いと思います。
まあそれでも荒業ですが。
引用返信 編集キー/
■8908 / inTopicNo.10)  Re[8]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ mxh (6回)-(2007/10/12(Fri) 23:32:00)
No8906 (Hirotow さん) に返信
> ■No8870 (mxh さん) に返信
>>■No8862 (Hirotow さん) に返信
> >>WaitForExitを使うとそのプロセスが終了するまで待つのでAcrobatReaderが勝手に終了しない限りはそこで固まります。
> >>なので、楽に組みたいのであれば普通にStartしたあとThread.Sleepで一定時間待ったほうがいいと思います。
> >>
> >>FindWindowだかを使ってする場合WindowControlerというライブラリを使うと駱駝と思います。
>>Hirotowさん
>>ご返信有難う御座います。
>>
>>最初Thread.Sleepの方法でやっていましたが、
>>印刷帳票の枚数が多い場合、または途中別のユーザはプリンタを使うと、
>>印刷途中に終了してしまいました。
>>(やり方法は間違いました?)
>>
>>教えて頂いたWindowControlerについては、
>>あまり分かりませんが、調べてみます。
>>有難う御座います。
>
> Thread.Sleepのほうは正常実行であれば確実に終わるだろうという時間待って終了するパターンなので枚数によって時間を変えるなどしたほうが効率が良いと思います。
> まあそれでも荒業ですが。
>>Hirotow さん
有難う御座います。
このやり方法で途中に別の方はプリンタを使うと、
こちらは設定時間内で印刷できなくても
自動終了になると思いますが、


引用返信 編集キー/
■8910 / inTopicNo.11)  Re[6]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ 渋木宏明(ひどり) (464回)-(2007/10/13(Sat) 01:00:16)
渋木宏明(ひどり) さんの Web サイト
Acrobat Reader をオートメーションして印刷させればいいんじゃないでしょうか。

引用返信 編集キー/
■8911 / inTopicNo.12)  Re[7]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ やじゅ (2回)-(2007/10/13(Sat) 13:20:29)
No8910 (渋木宏明(ひどり) さん) に返信
> Acrobat Reader をオートメーションして印刷させればいいんじゃないでしょうか。

"OLEオートメーション Acrobat"でググって参考になりそうなサイトを2点挙げときます。

ググっただけだし、SDKが英語なのでよく分かりませんが、SDKを使えば何か出来そうな
気もしますし、出来ないかもしれません。

悩みどころが多い問題のようですね。他人事・・・(^^;

添付印刷の種々の問題点とその対応について
参照先:http://72.14.253.104/search?q=cache:aFcMuYdq9WMJ:onegland.hp.infoseek.co.jp/cgi-bin/cfbbs/cf.cgi%3Flog%3D0%26no%3D166%26mode%3Dall+OLE%E3%82%AA%E3%83%BC%E3%83%88%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3+Acrobat&hl=ja&ie=UTF-8

引用:
>印刷後に自動で閉じさせるにはAdobe Readerでは不可能?。
>(Acrobatにある「OLEオートメーション」なら可能だが、この機能はAdobe Readerには無いため)

「DDEコマンドを送信」でAcrobatReaderを閉じるには?
参照先:http://www.kipwmi.com/fmbbs/wwwlng.cgi?print+200606/06060121.txt

引用:
>DDE コマンドを送信 [サービス名: "Acroview"; トピック: "Control"; コマンド: "[AppExit()]"]
>http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/iac/IACReference.pdf

引用返信 編集キー/
■8914 / inTopicNo.13)  Re[8]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ 渋木宏明(ひどり) (465回)-(2007/10/13(Sat) 14:53:56)
渋木宏明(ひどり) さんの Web サイト
> "OLEオートメーション Acrobat"でググって参考になりそうなサイトを2点挙げときます。

> 「DDEコマンドを送信」でAcrobatReaderを閉じるには?
> 参照先:http://www.kipwmi.com/fmbbs/wwwlng.cgi?print+200606/06060121.txt
>
> 引用:
> >DDE コマンドを送信 [サービス名: "Acroview"; トピック: "Control"; コマンド: "[AppExit()]"]
> >http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/iac/IACReference.pdf

OLE オートメーションと DDE は別物です。
ものすごーく深いところまで理解して言っているなら別ですが。

Adoebe の出してる SDK ドキュメントを読んで、OLE オートメーションしてやればデフォルトのプリンタに対する印刷&終了くらいは出来るはずです。
プリンタの指定なんかまでやろうとすると、ひょっとしたら厳しいかもしれません。
引用返信 編集キー/
■8925 / inTopicNo.14)  Re[9]: PDFファイル印刷後、Adobe Readerが閉じてないで
□投稿者/ mxh (7回)-(2007/10/13(Sat) 23:25:02)
2007/10/15(Mon) 23:33:44 編集(投稿者)
2007/10/15(Mon) 23:33:29 編集(投稿者)

No8914 (渋木宏明(ひどり) さん) に返信
>>"OLEオートメーション Acrobat"でググって参考になりそうなサイトを2点挙げときます。
>
>>「DDEコマンドを送信」でAcrobatReaderを閉じるには?
>>参照先:http://www.kipwmi.com/fmbbs/wwwlng.cgi?print+200606/06060121.txt
>>
>>引用:
>>>DDE コマンドを送信 [サービス名: "Acroview"; トピック: "Control"; コマンド: "[AppExit()]"]
>>>http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/iac/IACReference.pdf
>
> OLE オートメーションと DDE は別物です。
> ものすごーく深いところまで理解して言っているなら別ですが。
>
> Adoebe の出してる SDK ドキュメントを読んで、OLE オートメーションしてやればデフォルトのプリンタに対する印刷&終了くらいは出来るはずです。
> プリンタの指定なんかまでやろうとすると、ひょっとしたら厳しいかもしれません。



引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -