VBアプリからプリンターのトレイを指定したい

タグの編集
投稿者 HORI  (社会人) 投稿日時 2016/9/16 23:19:50
VB2010EX でプログラムを書いてますが、印刷の際、用紙の大きさは同じでも、用途によって色の違う紙に印刷したく思うのですがうまくできません。

方法としては、プリンタートレイにセットする用紙を色ごとに分け、どのトレイを使用するかで色の分別ができればいいのですが・・・・・・

いろいろ当たった結果、System.Drawing.Printing.PaperSource で出来そうなんですがうまくいかないのです。PrintDialog を使えばトレイの指定はできますが、その度にいちいちセットするのは大変面倒なのでプログラムで直接指定したいのです。

以下のサンプルは、Form に Button PrintDocument PrintDialog を張り付けて書いたものです。

家のプリンターでは、RawKind と云うパラメーターが、1 でメイントレイ、3 でサブトレイになるはずみたいです。サンプルを実行すると、MsgBox の①と②は[3 : カセット2 : 3]で同じですが、③は[NG]になり、Print1 はメイントレイ、Print2 はサブトレイから給紙され印刷されます。PaperSource の、RawKind、 SourceName、 Kind 以外のパラメーターがあるのでしょうか?。 

要は、Print1 でサブトレイから給紙されるようにするにはどうしたらいいのでしょうか?。と云う質問内容です。お分かりの方、おられましたらご教示ください。よろしくお願いいたします。


=============== さんぷる ============================

Public Class Form1

  Dim A5PRname As String = "\\SERVER\LBP6600"

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' ======= プリンター設定 ===========

        PrintDocument1.PrinterSettings.PrinterName = A5PRname

        Dim pk As System.Drawing.Printing.PaperKind

        pk = Printing.PaperKind.A5

        Dim ps As System.Drawing.Printing.PaperSize

        For Each ps In PrintDocument1.PrinterSettings.PaperSizes
            If pk = ps.Kind Then
                PrintDocument1.DefaultPageSettings.PaperSize = ps
            End If
        Next

        PrintDocument1.DefaultPageSettings.Landscape = True

        Dim pt As System.Drawing.Printing.PaperSource

        Dim pt2 As System.Drawing.Printing.PaperSource

        '=========== Print 1 =======================================

        pt = PrintDocument1.DefaultPageSettings.PaperSource

        For i = 0 To PrintDocument1.PrinterSettings.PaperSources.Count - 1

            pt = PrintDocument1.PrinterSettings.PaperSources.Item(i)

            If pt.RawKind = 3 Then
                Exit For
            End If

        Next

        MsgBox(CStr(pt.RawKind) & " : " & pt.SourceName & " : " & pt.Kind)  ' ①

        PrintDocument1.Print()

        '============= Print 2 =======================================

        If PrintDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then

            pt2 = PrintDocument1.DefaultPageSettings.PaperSource

            MsgBox(CStr(pt2.RawKind) & " : " & pt2.SourceName & " : " & pt2.Kind) '②

            PrintDocument1.Print()

            Dim ss As String = "NG"

            If pt.Equals(pt2) Then ss = "Good"

            MsgBox(ss) '③

        End If

    End Sub

    Private Sub PrintDocument1_PrintPage(sender As Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

        Dim f10 As New Font("MS ゴシック", 10, FontStyle.Bold)

        e.Graphics.DrawString("Test", f10, Brushes.Black, 0, 0)

    End Sub

End Class
投稿者 PS/55  (社会人) 投稿日時 2016/9/18 23:48:58
コンボボックスの選択値からですけどこれでいけた気がするんですが…
PrintDocument.DefaultPageSettings.PaperSource = CType(ComboBox_Tray.SelectedItem, Printing.PaperSource)

For Each PpSc In PrintDocument.PrinterSettings.PaperSources
ComboBox_Tray.Items.Add(PpSc)
Next

投稿者 HORI  (社会人) 投稿日時 2016/9/19 00:39:18
PS/55 さま。ありがとうございます。

Print1 の Exit For の前に

PrintDocument1.DefaultPageSettings.PaperSource = pt

と入れたらうまくいきました。

PrinterSettings のデータを PageSettings に入れてやらないとだめと云う事ですね。
僕の読解力ではMSのHPから読み取ることができませんですね。
簡単に書いてくれればいいのにねぇ。
ヒントをいただき、ありがとうございました。