- PR -

(C#)AcrobatReaderを使って印刷した結果が成功か失敗かを取得したい

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-03-17 07:44
Spy++ みたいなことをします。

 先にも書きましたが、公開していない情報を採取することは出来ません。その辺は、SDKのドキュメントに書いてあるはずです、公開しているのですから。

 公開されていない情報を盗るとなると(漢字使い分けているのに注意してね)、相応の知識が必要です。また、バージョンが変わると通用しない可能性もあります。

 で、どこまでしなければならないかは、予算と相談となります。その辺はどうですか?


> もうすぐ妻の誕生日です。
おめでとうございます。
明日は私の誕生日です。
_________________
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-03-17 10:41
私もAcrobatReaderのみの環境で印刷制御を試した事がありますが、
Readerだけではかなり苦しいですね。

私の場合は印刷の成功・失敗の監視ではなく、連続印刷だったのですが、
プロセス起動、スプール監視、スリープ、を繰り返した覚えがあります。
スプールに溜まりすぎると切り捨てられるのですが、エラーが分からないんですね。

SDKを買うかクライアントにReaderではない方(Adobe Acrobat)を買ってもらえば、
連続印刷が出来そうだったのですが、「予算がない」とのことで、
上記のような泥臭いことをやりました。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-03-17 13:21
Windows の標準機能としては、printer へ正しく spool data 送れるかまでが担当範囲だったと思いますけど。
それ以降は、その printer の driver とかでやっていたような。

ちなみに spool までの範囲内なら WMI でも監視できます。

また、Adobe Reader でも簡単な範囲なら扱える COM class が提供されていたと思います。
# ただし、こちらは環境によって動かないことが結構あるようで、実質使えない可能性があったような気が。。。

参照 Adobe Acrobat 8.0 Browser Control
form に control はりつけ、object name を AcroPDF1 にする
コード:

Private Sub AcroPDF1_Enter()
Dim boolFlag As Boolean
Dim strPath As String

boolFlag = AcroPDF1.LoadFile(strPath)
objPDF.PrintAll
End Sub


[編集]
path 訂正
さらに編集 form に control はっつけないとつかないようです。。。
あと、なぜか Acrobat が新たな window で立ち上がる。。。
問題山積みです。。。
[/編集]

手元に環境がないので、legacy の VB で書いていて、かつ印刷 test 行っていないのであしからず。

_________________
ちゃっぴ@わんくま同盟

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2007-03-17 13:22 ]

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2007-03-17 13:47 ]
EarlyHero
常連さん
会議室デビュー日: 2007/03/16
投稿数: 37
お住まい・勤務地: 福岡県
投稿日時: 2007-03-17 15:15
みなさん休日でもご返信いただきありがとうございます。
大きなケーキを作りすぎて2人で食べきれるか心配です

まぁそんな心配はさておき、印刷についてですが、SDKにお金を
使うことはできそうにないですね。残念ながら自社開発ではないので。

監視プロセスは「Spy++」に近いということですが、やはりこれも
私の知識不足でイメージできませんでした。もっと勉強して
監視プロセスを使えるようにしようと思います。
参考にしやすいサイトがあれば教えてくださいね。

今回作っているのは基本的に連続印刷しないものになるのですが、
みなさんのご意見を参考にすると
「既存プロセス監視→プロセス起動→プロセス監視→スプール監視
 →スリープ→プロセス終了→(プロセス監視終了?)」
の手順で印刷を行うことになりそうですね。
月曜日に実際に作って検討してみたいです。
私は何かと安易に考えてしまいがちなので、上記手順で注意しておかないと
いけないところがあればご注意ください。

あと、ちゃっぴさんが書いてらっしゃることを実はC#で行って確かめて
みたのですが、終了時にAcrobatReaderのプロセスが残ってしまうし、
既にAcrobatReaderが起動している場合にうまく動いてくれなかったので
断念しました。参考になるサイトもなかったので現状は最初に書いた
プログラムのようにしています。でも、ありがとうございます。

Jittaさん、明日誕生日ですか、ちょっと早いですがおめでとうございます。
20歳を超えるとおめでたいのか、おめでたくないのか分からなくなって
きますが、やっぱり1年間無事に生きていることをお祝いするっていいですね。

[ メッセージ編集済み 編集者: EarlyHero 編集日時 2007-03-17 15:20 ]
howfar
会議室デビュー日: 2007/03/16
投稿数: 14
投稿日時: 2007-03-18 00:54
ああ、みんな日本語いっぱいがあるので、私は理解しにくいです(T_T)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
AcrobatReaderを監視するよりは、プリンタのタスクを監視したほうがいいと思います、
もちろんwin32APiでもできる、でも、プリンタのタスクを監視すれば、.netframeworkのAPIもできると思います、win32APIより.netのApiが簡単だと思います

ps:もし、私の日本語が間違いところがあったら、直接直していただきますか、私は外国人ですから、日本語を勉強しています、お願いします^_^

ちょっと眠いですが、じゃ、お休みなさい^_^
_________________
私は今日本語をべんきょうしていますが、だから日本語がうまくないですから、もし違うところがあったら、ご指導ください^_^
howfar.jp@gmail.com
EarlyHero
常連さん
会議室デビュー日: 2007/03/16
投稿数: 37
お住まい・勤務地: 福岡県
投稿日時: 2007-03-18 01:19
アドバイスありがとうございます。

スプールを監視するのとプリンタのタスクを監視するのは違うことですか?
もし違うとなるとAcrobatReaderを監視したり、プリンタを監視したりと
大変そうですね。
howfarさん、監視については.NETのAPIでどちらも同時に出来ますでしょうか?
AcrobatReaderからエラーメッセージを取得したですし、プリンタから
印刷エラーを取得したいので、どちらも同じ機能でできるとなると
管理しやすいです。もしご存知でしたらあとでご返信をお願いします。

howfarさんの文章は漢字も適切に使われていますし、日本語を勉強中とは
思えないあるよ、なんちゃって。
あっ18日、Jittaさんお誕生日おめでとうございます。

[ メッセージ編集済み 編集者: EarlyHero 編集日時 2007-03-18 01:30 ]
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-03-18 01:36
スプールを監視すると状態がわかるのですが、
自分自身のプログラム内で作成したジョブではないので、
見つかったジョブが、プログラム内から起動したプロセスの
AcrobatReaderで作られたジョブかまでは正確には分かりませんでした。

同じ名前のジョブがあれば誤作動かもしれないけど・・・
という条件付で運用してもらった気がします。

私自身がWindows系のプログラムには疎いので、
これでよかったのかは自信がありません。
howfar
会議室デビュー日: 2007/03/16
投稿数: 14
投稿日時: 2007-03-18 14:09
http://www.codeproject.com/vb/net/printwatchvbnet.asp
---------------------------------------------------
この文章にはプリンタのタスクを監視する方法が紹介することがあります


_________________
私は今日本語をべんきょうしていますが、だから日本語がうまくないですから、もし違うところがあったら、ご指導ください^_^
howfar.jp@gmail.com

[ メッセージ編集済み 編集者: howfar 編集日時 2007-03-18 14:22 ]

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