給紙トレイをダイアログを使わずに指定して印刷する方法

このQ&Aのポイント
  • Visual Basic 2003を使用して、印刷ダイアログを表示せずに印刷を行いたい場合、給紙トレイを切り替える方法について教えてください。
  • フォーム上のチェックボックスの状態に応じて、印刷を自動でトレイ1またはトレイ2から行いたいと考えています。
  • 現段階では、できるかどうかを知りたい状況です。お分かりになる方がいらっしゃいましたら、教えていただけないでしょうか?
回答を見る
  • ベストアンサー

給紙トレイをダイアログを使わずに指定して印刷する方法

言語:[Visual Basic 2003] お世話になります。 表題の件なのですが、vb2003で印刷ダイアログを出さずに、 印刷を行おうと思っております。 まだその段階ではないのですが、やりたいこととしまして まず、何かしらの処理を行いそれが済んだときに印刷を自動で行うのですが、その処理の結果によって給紙トレイ先を切り替えたいのです。 例えば、フォーム上にあるチェックボックスがTrueのときに、印刷ボタンを押下するとトレイ1から印刷。 チェックボックスがFalseのときは、トレイ2から印刷といった感じにしたいのです。 とりあえず現段階では、できるかどうかを知りたいのですが もしお分かりいただける方がいらっしゃいましたら、お教え願えませんでしょうか? 言葉足らずな面もあるかと思われますが、よろしくお願い致します。

  • ctske
  • お礼率81% (44/54)

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

給紙装置と用紙サイズが一対になっているような場合 これを食い違う設定にしてしまうことが問題なように思います A3の給紙装置を指示したのに、用紙はA4と指示すると プリンターは指示された給紙装置と要求されている用紙サイズが違うので印刷不能です となるのではないかと思います # ん~ いい例えが思いつきません ・・・ プリンターのメーカサイトやプリンターの活用メーリングリストなどで 用紙サイズの設定と給紙装置の指示などの方法の情報を探してみるのもひとつの方法でしょう つまり A3の上半分と 下半分でページングをしたいような場合 用紙サイズを変更してしまうよりも その描画範囲のバッファを準備してそこへ描画 2ページ分描画を行って プリンターへデータを転送 といった手法を使ったほうがいいように思います BitmapとはWindowsの画像を表示する形式のひとつです Windows付属の『ペイント』で何か描画し、保存するとこの形式を最初に選択します 拡張子が BMPとなっているファイルです dim bmp as New Bitmap( 640, 480 ) dim g as Graphics = Graphics.FromImage( bmp ) g.DrawLine( New Pen( Color.Red, 1 ), 20, 20, 300, 220 ) g.Dispose() PictureBox1.Image = bmp といった具合に GraphicsオブジェクトをBitmapから生成して描画 これを コントロールのImageプロパティに設定することにより 再描画などの処理を Widnowsにやらせてしまう手法があります これと同様なことを A4サイズの Bitmapを作ってそこへ描画 引数の e.GraphicsのDrawImageで描画内容を プリンターへ転送 といった手法です

ctske
質問者

お礼

何度もご回答ありがとうございます >A3の給紙装置を指示したのに、用紙はA4と指示すると >プリンターは指示された給紙装置と要求されている用紙サイズが違うので印刷不能です >となるのではないかと思います 指定した給紙トレイにセットされている用紙はA3で、 指定した用紙サイズもA3なのに印刷されないということは 何か設定し足りないのかもしれません あと実験してみたのですが、A3が入っていたトレイにA4をセットして 印刷を行ってみたところ、印刷処理を行ってくれました (何故か紙詰まりしてしまうけど・・・) やはりA3のトレイはA3のみ使用可能という風に認識してしまった方が よさそうな感じがします >プリンターのメーカサイトやプリンターの活用メーリングリストなどで >用紙サイズの設定と給紙装置の指示などの方法の情報を探してみるのもひとつの方法でしょう どうも使用しているプリンタの生産が終了しているようで、それらしい情報が見当たりませんでした >BitmapとはWindowsの画像を表示する形式のひとつです 想像していたものと同じでした 他に何か特別な意味があるのではと考えていました(笑 >dim bmp as New Bitmap( 640, 480 ) ... >再描画などの処理を Widnowsにやらせてしまう手法があります なるほど、このような処理はしたことがなかったので 勉強になりました ゆくゆくはレポート形式のドキュメントを印刷したいと思っているので Bitmapの手法は使わないことになるかと思いますが、今後の参考にさせていただきます ありがとうございました

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

> 「最適用紙がありません 用紙:A4」... のようなメッセージは カセット型の用紙ポッパーなどの場合に起きる現象のように思います A3/A4の用紙がセットされたコピー機でB4のコピーをとろうとしたとき カセット(ホッパー)を代えてくれということのように思います 印刷範囲の設定をしたいのであれば 描画範囲の矩形をもったBitmapからGraphicsオブジェクトを生成して そのGraphicsオブジェクトに描画 その後 e.Graphicsの DrawImageで希望位置に描画 といった工夫をなさったほうがいいかもしれませんよ また ps.RawKindは .NET Framework1.1にはありませんのでお気お付けください > Dim pdoc As New PrintDocument > pdoc = PrintDocument1 これは  Dim pdoc As PrintDocument  pdoc = PrintDocument1 または  Dim pdoc As PrintDocument = PrintDocument1 でいいと思いますよ pdocの宣言時にオブジェクトを作って、次にpdocにPrintDocument1を代入してしまっては 宣言時に作ったオブジェクトが無駄になります

ctske
質問者

お礼

ご回答ありがとうございます。助かります 最後に確認してもよろしいですか? >A3/A4の用紙がセットされたコピー機でB4のコピーをとろうとしたとき >カセット(ホッパー)を代えてくれということのように思います これはA3で印刷したいときにVB側で  '使用するトレイ指定  pdoc.PrinterSettings.PaperSources.Item(1) 'トレイ1(A3)  ...  Dim ps As New PaperSize  ps.RawKind = PaperKind.A3  'サイズをA3に指定  ps.PaperName = "A3"     '〃 のようにA3と指定しても無意味ということでしょうか? 単純に用紙トレイ先を pdoc.PrinterSettings.PaperSources.Item(0) の.Item()の値を変更したりするだけではダメということですよね ということでredfox63様が仰った >描画範囲の矩形をもったBitmapからGraphicsオブジェクトを生成して >そのGraphicsオブジェクトに描画 >その後 e.Graphicsの DrawImageで希望位置に描画 の方法を用いて印刷を行うという工夫が必要ということなのですが これはあらかじめBitmap形式の画像を用意しておいて、 それを基にGraphicsオブジェクトを生成→描画→e.Graphicsに描画→印刷 とするのでしょうか? この場合のBitmapというものがいまいちわかっていないので、認識が間違っているかもしれません >また ps.RawKindは .NET Framework1.1にはありませんのでお気お付けください お気遣いありがとうございます インストールされているのは.NET Framework2.0でした >pdocの宣言時にオブジェクトを作って、次にpdocにPrintDocument1を代入してしまっては 宣言時に作ったオブジェクトが無駄になります なるほど・・・ 確かに2度手間ですね、もはや約束事のようにNEW化宣言していたので ほとんど気にしていませんでした・・・

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

給紙装置の種別は PrinterSettingsのPaperSourcesが管理しています 印刷物の給紙元の管理は PageSettingsのPaperSourceです 印刷前にPrintDocumentオブジェクトのDefaultPageSettings.PaperSourceを設定するようですよ たとえば 給紙装置のコレクションの2番目をを選択したいのであれば dim pd as new PrnteDocument ' pdのPrintPageハンドラなどを設定 pd.DefualtPageSettings.PaperSource = _   pd.PrinterSettings.PaperSources.Item(1) といった具合にします # .NETのコレクションは 0ベースですので 1番目が0 # 2番目が 1、3番目が2 といった引数になります # 実機で試したコードではないので不備があるかもしれません

ctske
質問者

お礼

ご回答ありがとうございます。 redfox63様の方法を参考に、とりあえず印刷されるかどうかだけ 確かめてみました。 'ボタンクリック Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  Dim pdoc As New PrintDocument  pdoc = PrintDocument1  'Item(0)=自動,Item(1)=A3,Item(2)=A4  pdoc.DefaultPageSettings.PaperSource= _  pdoc.PrinterSettings.PaperSources.Item(1) '※1  pdoc.Print() End Sub '印字詳細 Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage  e.Graphics.DrawString("あいうえお", _  New Drawing.Font("MS 明朝", 14), _  Drawing.Brushes.Black, _  10, 10, New Drawing.StringFormat)    Dim ps As New PaperSize  ps.RawKind = PaperKind.A4  '※2  ps.PaperName = "A4"     '※3    e.PageSettings.PrinterSettings.DefaultPageSettings.PaperSize = ps End Sub 諸事情で、今VB2005しか使えなかったのでそちらで試してみましたが 以上のやり方で一応印刷はされました。 が、※1をItem(1)にし、※2,3のところをA4からA3に変えて印刷を行おうとすると 「最適用紙がありません 用紙:A4」のようなメッセージがプリンタ側の画面に表示されて印刷されませんでした。 指定したトレイにはA3の用紙はちゃんとセットされているので、 VB側でのコードが問題なような感じなのですが、よくわかりません。 また、WEBで調べていて見つけた情報なのですが、プリンタによってはVB側からの設定を無視することがあるらしいので、その辺が怪しそうです。 もうちょっと調べてみたいと思いますので、締め切りの方はもうしばらくお待ちください。

関連するQ&A

  • エクセルの印刷ダイアログをSendkeysで操作したい。

    エクセルのマクロ処理でフォーム上のボタンから 印刷ダイアログを呼び出して、そのダイアログを Sendkeysでもって両面印刷設定にし印刷させると いう処理を行いたいのですが上手くいきません。 印刷ダイアログが表示された段階で止まり(エラーで 止まるわけではなく単に処理が止まる)、その先の Sendkeysによる命令へ進みません。 Private Sub CommandButton1_Click() Application.Dialogs(xlDialogPrint).Show SendKeys "%r", True SendKeys "%k", True SendKeys "^{tab}", True SendKeys "^{tab}", True SendKeys "^{tab}", True SendKeys "%r", True SendKeys "{enter}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "{enter}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "+{tab}", True SendKeys "{enter}", True End Sub よくSendKeysは環境によって誤作動などが起こるので 使わない方がいいと言われますが、一度どのように 動くのか試してみたいと思っています。 ちなみに上のコードは当方のプリンタでの設定手順となります。 SendKeysで印刷ダイアログにキーを送ることは できないのでしょうか? 宜しくお願いします。

  • 印刷ダイアログを表示させたくない

    VB6.0でWORDファイルを印刷する機能を作成しています。 ボタンを押して指定のファイルを印刷する際、 完全にバックグラウンドで印刷したいのですが、 どうしても「印刷中」のダイアログが出てしまいます。 ソースは以下のとおりです。 Dim wd As Word.Application Set wd = CreateObject("Word.Application") wd.Visible = False wd.Documents.Open FileName:="D:\sample.doc", ReadOnly:=True wd.Options.PrintBackground = False wd.ActiveDocument.PrintOut wd.ActiveDocument.Close wd.Quit Set wd = Nothing ダイアログを制御するプロパティは存在しないのでしょうか? ご指導のほどよろしくお願い致します。

  • Excelの5.0ダイアログについて

    いつもお世話になります。 過去質問を捜してみたのですが希望する回答がなかったため 質問させていただきます。 「まだ使ってるの?」と言われそうですが、 Excelの「MS5.0ダイアログ」を使ったシステムがあります。 10年以上動いているシステムなのですが、 この度、新規で機能の追加をする作業をしています。 ユーザフォームにしないのか?と聞いた所、 ダイアログシートで作ってくれ。といわれました。 開発環境はOSがXP、Excel2000です。 私自身は、 VBの経験は2年ほどあり、エクセルのマクロも触った事があります。 ユーザフォームを使っての開発もありますが、 ダイアログシートは今回初めて触る事になりました。 VBやユーザフォームを利用して組んでいた時には 出会わなかった文法に苦戦しております。 さて、前置きが長くなりました。 質問は ・ダイアログシート上に配置したOKボタンなどを押すと  勝手に終了してしまうのを防げないか。 というものです。 最終的にどう動かしたいのかと言いますと、 ---------------------------------------------------- 1・ダイアログシート上に配置したOKボタンを押す。 2・メッセージボックスを表示する。(OKボタンのみ) 3・OKボタンを押下するとメッセージボックスは閉じ、   シートはそのまま残っている。 ---------------------------------------------------- このようにしたいです。 現状では3の時にメッセージボックスと一緒にシートも終了していまいます。 可能ならばコレを阻止したいのですが方法はありますか? また、今後ダイアログシートで開発する際に参考になりそうな 本・サイトをご存知でしたら教えていただきたいです。 よろしくお願いいたします。

  • ダイアログボックス

    VB6.0で開発しています。 下記のようにして名前を付けて保存]ダイアログボックスを使って 保存しようと思っているのですが ダイアログボックスが開くとファイル名のところに:が表示されており :のままでキャンセルを押すとFalse.xlsという名前でマイドキュメントに保存されてしまいます。何が原因なんでしょうか? お願いします。 exl.Sheets(1).Name = "Sheet1" exl.Application.Visible = True fnm = Application.GetSaveAsFilename(fileFilter:="Excel ファイル (*.xls), *.xls") exl.SaveAs fnm

  • C# 2010 printPreviewDialogの消去法

    C# 2010 printPreviewDialogの消去法 印刷プレビューのダイアログを表示して左上のプリンタ釦を押下して印刷します 印刷が完了してもダイアログは表示され続けています この状態でもう一度ボタン1を押すと(1)のところで下記のエラーが起こります 『既に表示されているフォームをモーダルダイアログボックスとして表示出来ません。showDialogを呼び出す前に、フォームのVisibleプロパティをfalse にしてください』 素直な私は(1)の前に this.printPreviewDialog1.Visible = false; を加筆して再度実行したのですが 『既にモーダルに表示されているフォームはモーダル ダイアログ ボックスとして表示できません。showDialog を呼び出す前に、フォームを閉じてください。』 とのエラーになりました フォームを閉じろといわれても printPreviewDialog1.ShowDialog(); から戻ってきません。(2)が表示されないのです。 private void button1_Click(object sender, EventArgs e) { this.printPreviewDialog1.Document = this.printDocument1; printPreviewDialog1.ShowDialog(); -----(1) MessageBox.Show("printPreviewDialog End"); ----(2) } A どうしたら戻ってくるのでしょうか? B もし戻って来ないならどのようにすれば良いのでしょうか? 更に一般的にはどのように処理しているのですか? 基礎学力の欠如している私をお助けください

  • 多目的トレイで印刷されない。DCP-J4220N

    DCP-J4220N-Wユーザーです。 多目的トレイ印刷が急にできなくなりました。 セット段階で紙は認識されているようなのですが印刷段階で「紙を供給しろ」とのメッセージが出て印刷されません。 手差しトレイに一枚ずつ給紙すれば何とか印刷はできるのですが効率が悪くて... また用紙トレイからの印刷も問題なくできます。 同じ様な経験をされた方がいらっしゃいましたら対応策を是非、ご教示いただきたくよろしくお願いいたします。 ※OKWAVEより補足:「ブラザー製品」についての質問です。

  • タスクトレイアイコンの非表示

    下記問題の対応で困っております。 開発環境はVB.net 2003 です。 <問題> タスクトレイのアイコンを右クリックしてメニューを表示した状態でキーボードのAlt+F4キーを押下すると、メニューと併せてタスクトレイのアイコンまでが消えてしまいます(この時、実行ファイル自体は終了していません)。また、デバッグでアイコンが消えた後にicon.visibleの状態を見るとTrueのままでいます。但し、一度、icon.visibleをFalseにした後に再度Trueにするとアイコンは表示されるようになります。 できれば、Alt+F4キーを押されてもアイコンが消えないようにしたいのですが、逃げ道として、アイコンの表示、非表示をVisible以外で判断して非表示なら表示するような処理もありかなと考えております。 良い解決策があれば、教えてください。

  • TS203の後ろトレイ給紙について

    先日、印刷をしていたところ、インク切れの表示が突然出て、後ろトレイから給紙したものが途中まで吸い込んでとまってしまい、用紙を引き抜いて、インクを新しいものに交換して、再度紙をセットし、印刷しようとしたところ、前に印刷が中断したところまでは紙を吸い込んでいくのですがそこで止まってしまい、その後は電源ボタンが点滅しているだけで、いっこうに印刷ができません。電源ボタンを押したりしたら間で止まっていた紙は排出されるのですが、また紙をセットして印刷しようとしても、また途中までいって止まってしまいます。ノズルチェックパターン等を行うと、途中で止まる事なく、きれいに印刷されて出てくるのでローラーの物理的な故障ではないと思うのですが、きちんと印刷出来るようにするにはどうしたらいいでしょうか? ※OKWAVEより補足:「キヤノン製品」についての質問です。

  • DLLから表示しているモーダルダイアログよりも手前にかつモーダルにフォーム表示したい

    VBからOCX経由でDLLを呼び出しており、そのDLLからモーダルダイアログ(以下ダイアログ(1)と記述)を表示しています。このダイアログ(1)を表示中にVBから別フォーム(2)をダイアログ(1)より前面に表示させています。 フォーム(2)をダイアログ(1)より前面に表示し、ダイアログ(1)をマウスクリック等しても表示順序が入れ替わらないようにするにはどうすれば良いでしょうか? OCXおよびDLLの変更はできません。 フォーム(2)の代わりにMSGBOX関数にてメッセージボックスを表示させた場合には、メッセージボックスを終了以前にダイアログ(1)の操作は不可となりました。 ですので、何らかの方法で実現可能だと考えています。 よろしくお願いいたします。

  • 給紙がうまくいかない。

    Canon PIXUS Pro9000MarkII なんですが、プリントしようとしたら、プリントできません。仕方なくフロントトレイから給紙していますが、時間がかかってなりません。どうしたらよろしいでしょうか。クリーニングはしたのですが、ノイズチェックパターン印刷ですら、でませんのでどうしたらいいのか分かりません。機種自体古いので修理か、買いなおししかないのでしょうか。 ※OKWAVEより補足:「キヤノン製品」についての質問です。

専門家に質問してみよう