![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
言語:[Visual Basic 2003]
お世話になります。
表題の件なのですが、vb2003で印刷ダイアログを出さずに、
印刷を行おうと思っております。
まだその段階ではないのですが、やりたいこととしまして
まず、何かしらの処理を行いそれが済んだときに印刷を自動で行うのですが、その処理の結果によって給紙トレイ先を切り替えたいのです。
例えば、フォーム上にあるチェックボックスがTrueのときに、印刷ボタンを押下するとトレイ1から印刷。
チェックボックスがFalseのときは、トレイ2から印刷といった感じにしたいのです。
とりあえず現段階では、できるかどうかを知りたいのですが
もしお分かりいただける方がいらっしゃいましたら、お教え願えませんでしょうか?
言葉足らずな面もあるかと思われますが、よろしくお願い致します。
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で描画内容を プリンターへ転送
といった手法です
何度もご回答ありがとうございます
>A3の給紙装置を指示したのに、用紙はA4と指示すると
>プリンターは指示された給紙装置と要求されている用紙サイズが違うので印刷不能です
>となるのではないかと思います
指定した給紙トレイにセットされている用紙はA3で、
指定した用紙サイズもA3なのに印刷されないということは
何か設定し足りないのかもしれません
あと実験してみたのですが、A3が入っていたトレイにA4をセットして
印刷を行ってみたところ、印刷処理を行ってくれました
(何故か紙詰まりしてしまうけど・・・)
やはりA3のトレイはA3のみ使用可能という風に認識してしまった方が
よさそうな感じがします
>プリンターのメーカサイトやプリンターの活用メーリングリストなどで
>用紙サイズの設定と給紙装置の指示などの方法の情報を探してみるのもひとつの方法でしょう
どうも使用しているプリンタの生産が終了しているようで、それらしい情報が見当たりませんでした
>BitmapとはWindowsの画像を表示する形式のひとつです
想像していたものと同じでした
他に何か特別な意味があるのではと考えていました(笑
>dim bmp as New Bitmap( 640, 480 )
...
>再描画などの処理を Widnowsにやらせてしまう手法があります
なるほど、このような処理はしたことがなかったので
勉強になりました
ゆくゆくはレポート形式のドキュメントを印刷したいと思っているので
Bitmapの手法は使わないことになるかと思いますが、今後の参考にさせていただきます
ありがとうございました
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を代入してしまっては 宣言時に作ったオブジェクトが無駄になります
ご回答ありがとうございます。助かります
最後に確認してもよろしいですか?
>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化宣言していたので
ほとんど気にしていませんでした・・・
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 といった引数になります
# 実機で試したコードではないので不備があるかもしれません
ご回答ありがとうございます。
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が見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたが好きな本屋さんを教えてください
どのくらいの規模間で、どのような本が並んでいるか、どのような雰囲気なのかなどなど...
-
VB.NET+ActiveReports で印刷時の用紙トレイ選択
Visual Basic(VBA)
-
Visual Basicから、プリンタの印刷設定を変更する方法。
Visual Basic(VBA)
-
【VB.Net Windows】印刷設定(Canon 給紙方)の設定方法を教えてください
Visual Basic(VBA)
-
-
4
VBからプリンタに出力する時に印刷方向を縦から横に変更したいのですが・・・
Visual Basic(VBA)
-
5
マクロでプリンタ、用紙、給紙先を指定するには?
Excel(エクセル)
-
6
エクセルVBAで手差しトレイを指定させたい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ListBoxで改行したい
-
給紙トレイをダイアログを使わ...
-
PictureBoxのダブルバッファリ...
-
GDI+で重なった画像をピンポイ...
-
C#で壁の当たり判定と自キャラ...
-
立方体をくるくる回転させるプ...
-
Word 描画オブジェクトを削除...
-
Excel VBA:コントロールボタン...
-
VB 6.0 PictureBox のプロパテ...
-
win32api複数のタイマーを同時...
-
角が丸い長方形の描画
-
for文の実行速度を遅くしたいの...
-
iPhone開発にて 透過PNGを表示...
-
Visual C++ MaskedTextBoxの右...
-
線の描画速度
-
N88BASICでシューティングゲー...
-
VBA シートのボタン名を変更し...
-
worksheetFunctionクラスのVloo...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームを表示中にシ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxで改行したい
-
for文の実行速度を遅くしたいの...
-
PowerPoint の VBA
-
c言語 ちらつき
-
VB.NETでグラフィックを描くと...
-
C#を用いて描画する四角形の角...
-
win32api複数のタイマーを同時...
-
画面に絵を出す方法
-
給紙トレイをダイアログを使わ...
-
C#で壁の当たり判定と自キャラ...
-
花火のアルゴリズム
-
円の頂点の求め方を知りたいです。
-
C# DrawImage 物理サイズでな...
-
VB.netで図形描画ができません^^;
-
画面の再描画について
-
エクセルのレーダーチャート 0...
-
リアルタイムで再描画
-
.NETのPictureBoxでウインドウ...
-
Word 描画オブジェクトを削除...
-
vb6のTEXTBOX
おすすめ情報