- ベストアンサー
給紙トレイをダイアログを使わずに指定して印刷する方法
- Visual Basic 2003を使用して、印刷ダイアログを表示せずに印刷を行いたい場合、給紙トレイを切り替える方法について教えてください。
- フォーム上のチェックボックスの状態に応じて、印刷を自動でトレイ1またはトレイ2から行いたいと考えています。
- 現段階では、できるかどうかを知りたい状況です。お分かりになる方がいらっしゃいましたら、教えていただけないでしょうか?
- みんなの回答 (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で描画内容を プリンターへ転送 といった手法です
その他の回答 (2)
- redfox63
- ベストアンサー率71% (1325/1856)
> 「最適用紙がありません 用紙: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を代入してしまっては 宣言時に作ったオブジェクトが無駄になります
お礼
ご回答ありがとうございます。助かります 最後に確認してもよろしいですか? >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)
給紙装置の種別は 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 といった引数になります # 実機で試したコードではないので不備があるかもしれません
お礼
ご回答ありがとうございます。 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側からの設定を無視することがあるらしいので、その辺が怪しそうです。 もうちょっと調べてみたいと思いますので、締め切りの方はもうしばらくお待ちください。
お礼
何度もご回答ありがとうございます >A3の給紙装置を指示したのに、用紙はA4と指示すると >プリンターは指示された給紙装置と要求されている用紙サイズが違うので印刷不能です >となるのではないかと思います 指定した給紙トレイにセットされている用紙はA3で、 指定した用紙サイズもA3なのに印刷されないということは 何か設定し足りないのかもしれません あと実験してみたのですが、A3が入っていたトレイにA4をセットして 印刷を行ってみたところ、印刷処理を行ってくれました (何故か紙詰まりしてしまうけど・・・) やはりA3のトレイはA3のみ使用可能という風に認識してしまった方が よさそうな感じがします >プリンターのメーカサイトやプリンターの活用メーリングリストなどで >用紙サイズの設定と給紙装置の指示などの方法の情報を探してみるのもひとつの方法でしょう どうも使用しているプリンタの生産が終了しているようで、それらしい情報が見当たりませんでした >BitmapとはWindowsの画像を表示する形式のひとつです 想像していたものと同じでした 他に何か特別な意味があるのではと考えていました(笑 >dim bmp as New Bitmap( 640, 480 ) ... >再描画などの処理を Widnowsにやらせてしまう手法があります なるほど、このような処理はしたことがなかったので 勉強になりました ゆくゆくはレポート形式のドキュメントを印刷したいと思っているので Bitmapの手法は使わないことになるかと思いますが、今後の参考にさせていただきます ありがとうございました