「ファイルへ出力」で印刷するには?

解決


まこ  2005-03-04 06:35:50  No: 88669

[環境]言語:VB6.0SP5 OS:WinXPProSP2
      プリンタ:Adobe PDF(Acrobat7.0)
VBで作成しているアプリケーションにて、
ユーザがローカルにある一太郎やテキストファイルを選択して
OKボタンを押した時に、
印刷処理を実行させ、このVBアプリケーションが指定するフォルダに
PSファイルを生成したいと考えております。

(印刷処理時は印刷ダイアログを表示せずに、
  一気にPSファイルを作成し、その後「ファイルを作成しました」
  のようなメッセージがでるだけで終了することを想定しています)

PSファイル生成のためにはプリンタの出力ポートをFILE:へ変更、
もしくは「ファイルへ出力」にチェックを入れた状態で
印刷しなければならないものと認識しております。
ここでみなさまにお伺いしたいのですが、
Win32APIの印刷用関数(setPrinter等)を利用して
印刷時のみ出力ポートの変更、
もしくは「ファイルへ出力」の設定
するこということは可能でありますでしょうか?
また、出力ポートの変更 もしくは「ファイルへ出力」設定が
可能であった場合、その後に表示されます
出力ファイル名ダイアログへのファイル名入力は
sendkeys以外での制御は可能でありますでしょうか?

ちなみに「Adobe PDF」の印刷設定値を
変更することはできない運用となっております。

よろしくお願いいたします。


Say  2005-03-04 18:02:19  No: 88670

>印刷時のみ出力ポートの変更、
>もしくは「ファイルへ出力」の設定
>するこということは可能でありますでしょうか?
可能です。

>出力ファイル名ダイアログへのファイル名入力は
>sendkeys以外での制御は可能でありますでしょうか?
可能です。

>印刷処理を実行させ、このVBアプリケーションが指定するフォルダに
>PSファイルを生成したいと考えております。
APIに不慣れなら、出力後にファイル移動という手もあるのでは?


まこ  2005-03-04 18:51:52  No: 88671

Say様、書き込みありがとうございます。

確かにAPIに不慣れでありますが、
「ファイルへ出力」設定もしくは出力ポートの変更を行わない場合、
AdobePDFではPDFが作成されますが、保存先の設定が各端末ごとに異なってしまうため、このアプリで制御することは困難であると考えております。
そこで今回はどうしてもこのアプリで「出力ポート変更」(もしくは「ファイルへ出力」)とファイル名指定を行いたいのです。

「出力ポート変更」もしくは「ファイルへ出力」設定と、ファイル名指定の制御は
実際どのような関数を利用するのか教えていただけませんか?

以上、よろしくお願いいたします。


岡田 之仁  2005-03-04 19:44:32  No: 88672

環境や設定に左右されるから、一括してプログラム化する・・・
と言うのは正しいアプローチだと思いますが、その要求される技量が
無い場合、かなりご苦労されると思います。

市販品を購入してすませるというのは無理なのでしょうか?

エクセルソフトが販売するActivePDFの製品群の中に、今回行ないた
い仕様が実現可能な機能の製品があります・・・

http://www.xlsoft.co.jp/jp/products/activepdf/activepdf-products.html

ご参考までに・・・

※  そのものズバリでない部分もありますが・・・

以上。


まこ  2005-03-04 21:44:58  No: 88673

岡田様、書き込みありがとうございます。

印刷関係APIは非常に多くの知識が必要であると
ある掲示板に記事がありました。
なるほど確かにMSDNを読んでいてもお恥ずかしい話、
どのように利用するのかピンとこないものもあります。

現在想定している実装方法としましては以下となりますが、
出力ポートの変更をするということは、
印刷処理自体をAPIで実装してやらないとできないのでしょうか?

①何らかの処理でプリンタの出力ポート、
  もしくはファイルへ出力に設定する。
②ShellExecuteを利用して印刷させたいファイルに
  印刷処理を実行させる。
③何らかの処理(もしくはsendkeysで強引に)
  ファイル名指定の文字列を入力し、
  OK処理をさせて実行させる。
④①で変更した設定値を元に戻す。

ご提案いただいた市販ソフトの導入は、
環境を変えてしまうことと、
コストの面で利用することができません。

全てを自動化することは非常に困難であるとのお話を
度々頂いておりますので、
「印刷ダイアログを表示し、ユーザに1クリックしてもらう」
という操作を足した状態での実装も
併せて検討していこうと思います。

APIでの実装方法に限らず、
実装方法につきましてご意見等ございましたら
是非お伺いさせていただきたく、
よろしくお願いいたします。


まこ  2005-03-07 01:34:44  No: 88674

その後色々試してみましたが、
こちらの掲示板に以前掲載されておりましたページ
http://www.vbvbvb.com/jp/gtips/index.html
を参考に、ポート情報を取得し、FILE:ポートを探し出した後、
プリンターの設定を変更する方法でできそうですのでこれでやってみようと思います。
(ファイル名指定はsendkeysでどうにかしようかと考えております)
①ポート情報を取得する(EnumPorts)
②ポート情報より"FILE:"ポートの情報を探し出す
③プリンタのオブジェクトハンドルを取得する(OpenPrinter)
④プリンタ情報を取得する(GetPrinter)
⑤ポート情報のみバックアップを取り変更する
⑥プリンタ情報を設定する(SetPrinter)
⑦プリンタオブジェクトをクローズする(ClosePrinter)

まだまだ問題ありそうな気もいたしますが、
とりあえず本件はこれにて解決とさせていただきます。
SAY様、岡田様 ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加