DOBON.NET DOBON.NETプログラミング掲示板過去ログ

印刷でに用紙の設定変更を行う方法

分類:[.NET]

PrintDialog,PageSetDialogを表示せずに、用紙の設定(用紙のサイズ(A3,A4,B4等)、用紙の向き(縦、横)を設定して印刷する方法についてご教授ください。
■No1971に返信(パオさんの記事)
> PrintDialog,PageSetDialogを表示せずに、用紙の設定(用紙のサイズ(A3,A4,B4等)、用紙の向き(縦、横)を設定して印刷する方法についてご教授ください。

PrintDocumentのDefaultPageSettingsのプロパティを適当に変更してみてください。用紙の設定はPaperSizeプロパティ、向きはLandscapeプロパティのようです。
■No1979に返信(管理人さんの記事)
> ■No1971に返信(パオさんの記事)
>>PrintDialog,PageSetDialogを表示せずに、用紙の設定(用紙のサイズ(A3,A4,B4等)、用紙の向き(縦、横)を設定して印刷する方法についてご教授ください。
>
> PrintDocumentのDefaultPageSettingsのプロパティを適当に変更してみてください。用紙の設定はPaperSizeプロパティ、向きはLandscapeプロパティのようです。

ご回答ありがとうございます。
何とか解決しました。

Dim strPapaerSZ As String
Dim pPaperSz As System.Drawing.Printing.PaperKind

'用紙サイズ-'A3にする
pPaperSz = Printing.PaperKind.A3
Dim pkSize As System.Drawing.Printing.PaperSize

For Each pkSize In PrintDocument1.PrinterSettings.PaperSizes
If pkSize.Kind = pPaperSz Then
PrintDocument1.DefaultPageSettings.PaperSize = pkSize
End If
Next

    '用紙を横長に設定
pdcYosansho.DefaultPageSettings.Landscape = True


なんかV6と比べて面倒になったような気がするのですが、
    簡単に1〜2行で設定できないものなのでしょうか。
こんにちわ、お世話になっています。

用紙種類について私も1つお伺いしたいですが、Combobox1の中にインスト−ルされているプリンタの名前をすべてリストさせました。

やりたいのはCombobox1の中から選んだプリンタに対してCombobox2に用紙種類(A3, A4,等)をリストさせて貰いたいですがなかなかうまく行かない。

コ−ドを下記のように書くと用紙の寸法等までリストされるんです(選択したプリンタの用紙もじゃないかもしれない)。用紙の名前だけをどうやって得られますか、教えて頂けますか?

    Dim prtdoc As New PrintDocument()
Dim strPrinter As [String]
For Each strPrinter In PrinterSettings.InstalledPrinters
ComboBox1.Items.Add(strPrinter)
Next strPrinter
'ここまでの部分は大丈夫そうです

Dim PPsize As System.Drawing.Printing.PaperSize
For Each PPsize In prtdoc.PrinterSettings.PaperSizes
ComboBox2.Items.Add(PPsize)
Next
■No2001に返信(kaynakさんの記事)
> ComboBox2.Items.Add(PPsize)

単にシンプルな名前が欲しいのであれば、
ComboBox2.Items.Add(PPsize.PaperName)。
> 単にシンプルな名前が欲しいのであれば、
> ComboBox2.Items.Add(PPsize.PaperName)。

ありがとうございます。"PaperName"を追加したらシンプルになりました。

一つお伺いしたいですが、そのように書くとデフォルトプリンタの用紙類がリスト
されていますが、もしCombobox1の中から選んだ他のプリンタ(デフォルトじゃない)の用紙類をリストさせたかったらCombobox1とCombobox2をどうやって結べますか?

たとえばデフォルトはCanonですがSCAN2と言うプロッタを選んだらそのプロッタの用紙類
を取得するために "Set DefaultPrinter --> Combobox1.selecteditem" のような論理は正しいですか?

宜しくお願い致します。
■No2011に返信(kaynakさんの記事)

「プリンタ設定」のインスタンスを生成して、後からプリンタ名を与えると
勝手に対応するプリンタの設定に切り替わってくれるので、
用紙の情報を取得するのは簡単みたいです。何か。


例として、以下のコードで二つのプリンタについて対応用紙を表示します。
ご自分のシステム内のプリンタの名称に打ち替えて試してみてください。


Dim ps As New System.Drawing.Printing.PrinterSettings
Dim pstr As String
Dim pap As System.Drawing.Printing.PaperSize

pstr = ""
ps.PrinterName = "仮刷LBP-1810"
For Each pap In ps.PaperSizes
  pstr &= pap.PaperName & "/"
Next
MsgBox(pstr, MsgBoxStyle.OKOnly, ps.PrinterName)

pstr = ""
ps.PrinterName = "FinePrint 2000"
For Each pap In ps.PaperSizes
    pstr &= pap.PaperName & "/"
Next
MsgBox(pstr, MsgBoxStyle.OKOnly, ps.PrinterName)

で、うまく行くようなら、大丈夫なのかな?、と・・・。
■No2020に返信(こど。さんの記事)
上のres書いたものです。
すいません、中途半端な回答になってました。
続きです。(上のがうまく行くようであれば、です。)

単に表示される用紙群が選択したプリンタで対応するものになれば良いという話であれば、
プリンタ側コンボのイベント処理「SelectedIndexChanged」(選択が変更された際の処理)で、
用紙側コンボのItemsなりdataSourceなりを変更してしまえばよいのでは?

(だめ?)
> プリンタ側コンボのイベント処理「SelectedIndexChanged」(選択が変更された際の処理)で、
> 用紙側コンボのItemsなりdataSourceなりを変更してしまえばよいのでは?


本当にありがとうございます。大変だったけどおかげで下記のように片付けたらうまく行った(今のところ)。やりたかったのは結局AutoCADの印刷の時と同じことでした。I wish you a happy new year, take care till next time.

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender ........

ComboBox2.Items.Clear()
Dim ps As New System.Drawing.Printing.PrinterSettings()
Dim pstr As String
Dim pap As System.Drawing.Printing.PaperSize

pstr = ""
ps.PrinterName = ComboBox1.SelectedItem
For Each pap In ps.PaperSizes
ComboBox2.Items.Add(pap.PaperName)
Next

DOBON.NET | プログラミング道 | プログラミング掲示板