アプリ版:「スタンプのみでお礼する」機能のリリースについて

言語:[Visual Basic 2003]

お世話になります。

表題の件なのですが、vb2003で印刷ダイアログを出さずに、
印刷を行おうと思っております。

まだその段階ではないのですが、やりたいこととしまして
まず、何かしらの処理を行いそれが済んだときに印刷を自動で行うのですが、その処理の結果によって給紙トレイ先を切り替えたいのです。

例えば、フォーム上にあるチェックボックスがTrueのときに、印刷ボタンを押下するとトレイ1から印刷。
チェックボックスがFalseのときは、トレイ2から印刷といった感じにしたいのです。

とりあえず現段階では、できるかどうかを知りたいのですが
もしお分かりいただける方がいらっしゃいましたら、お教え願えませんでしょうか?

言葉足らずな面もあるかと思われますが、よろしくお願い致します。

A 回答 (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で描画内容を プリンターへ転送
といった手法です
    • good
    • 0
この回答へのお礼

何度もご回答ありがとうございます

>A3の給紙装置を指示したのに、用紙はA4と指示すると
>プリンターは指示された給紙装置と要求されている用紙サイズが違うので印刷不能です
>となるのではないかと思います

指定した給紙トレイにセットされている用紙はA3で、
指定した用紙サイズもA3なのに印刷されないということは
何か設定し足りないのかもしれません

あと実験してみたのですが、A3が入っていたトレイにA4をセットして
印刷を行ってみたところ、印刷処理を行ってくれました
(何故か紙詰まりしてしまうけど・・・)
やはりA3のトレイはA3のみ使用可能という風に認識してしまった方が
よさそうな感じがします

>プリンターのメーカサイトやプリンターの活用メーリングリストなどで
>用紙サイズの設定と給紙装置の指示などの方法の情報を探してみるのもひとつの方法でしょう

どうも使用しているプリンタの生産が終了しているようで、それらしい情報が見当たりませんでした

>BitmapとはWindowsの画像を表示する形式のひとつです

想像していたものと同じでした
他に何か特別な意味があるのではと考えていました(笑

>dim bmp as New Bitmap( 640, 480 )
...
>再描画などの処理を Widnowsにやらせてしまう手法があります

なるほど、このような処理はしたことがなかったので
勉強になりました

ゆくゆくはレポート形式のドキュメントを印刷したいと思っているので
Bitmapの手法は使わないことになるかと思いますが、今後の参考にさせていただきます

ありがとうございました

お礼日時:2009/06/18 10:38

> 「最適用紙がありません 用紙: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を代入してしまっては 宣言時に作ったオブジェクトが無駄になります
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。助かります

最後に確認してもよろしいですか?

>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化宣言していたので
ほとんど気にしていませんでした・・・

お礼日時:2009/06/17 09:46

給紙装置の種別は 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 といった引数になります

# 実機で試したコードではないので不備があるかもしれません
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

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側からの設定を無視することがあるらしいので、その辺が怪しそうです。

もうちょっと調べてみたいと思いますので、締め切りの方はもうしばらくお待ちください。

お礼日時:2009/06/16 10:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています