主婦と.NETと犬のぶろぐ

奥様 と プログラム と お犬様 の 楽しい日常

目次

Blog 利用状況

ニュース

書庫

日記カテゴリ

印刷関連(PageSetupDialog・PrintDialog・PrintDocument・PrintPreviewControl・PrintPreviewDialog)

うおー。前からまとめてやろうと思ってたんですが、
使ったこと無い上に一気に何個もはじめて使うのはきついー。
MSDN 読むだけでつかれたー。

作ったのはいつも通りごくごく簡単なやつです。
画面を表示したときにインストールされてるプリンタの一覧をセットして
通常使うプリンタを選択し、そのプリンタがサポートする用紙の一覧をセットする。
あとは印刷したり余白かえたり、プレビューしたり、印刷したり。

ぐはー。

■参考文献
PageSetupDialog クラス
PrintDialog クラス
PrintDialog.UseEXDialog Property
PrintDocument クラス
PrintPreviewControl クラス
PrintPreviewDialog クラス
PageSettings クラス
PrinterSettings クラス
Windows フォームにおける印刷のサポート
Windows の通常使うプリンタを取得および設定する方法

■実行画像
とりあえず、PrintPreviewControl
Print PrintPreviewControl
とりあえず、PageSetUpDialog
Print PageSetUpDialog1
PageSetUpDialog から プリンタの設定ボタンを押下して出てきた画面。ここのヘルプボタンってどうやって捉えるんだろ?
Print PageSetUpDialog2
つぎ、PrintPreviewDialog
Print PrintPreviewDialog
さいご、PrintDialog
Print PrintDialog

Imports System.Runtime.InteropServices

Public Class PrintTest
' 現在のページ数 Private m_currentPage As Integer = 0
' 通常使うプリンタを取得 <DllImport("winspool.drv", CharSet:=CharSet.Auto)> _ Private Shared Function GetDefaultPrinter(ByVal pszBuffer As System.Text.StringBuilder, _ ByRef size As Integer) As Boolean End Function
Private Sub PrintTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' 通常使うプリンタを取得する Dim pszBuffer As System.Text.StringBuilder = New System.Text.StringBuilder(256) Dim size As Integer = pszBuffer.Capacity Dim defaultPrinterName As String = String.Empty If GetDefaultPrinter(pszBuffer, size) Then defaultPrinterName = pszBuffer.ToString() End If
'' インストールされているプリンタを ComboBox1 にセットする With Me.ComboBox1 .DropDownStyle = ComboBoxStyle.DropDownList For Each printerName As String In System.Drawing.Printing.PrinterSettings.InstalledPrinters .Items.Add(printerName) Next ' 通常使うプリンタを選択 If defaultPrinterName <> String.Empty Then .SelectedItem = defaultPrinterName End With
'' 用紙サイズの一覧をセット Me.SetPaperSizes() ' デフォルトの用紙サイズを指定 Me.ComboBox2.SelectedItem = Me.PrintDocument1.DefaultPageSettings.PaperSize.PaperName
'' 印刷するドキュメント AddHandler PrintDocument1.PrintPage, AddressOf Me.PrintPage ' 余白の指定(インチ指定) Me.PrintDocument1.DefaultPageSettings.Margins = New System.Drawing.Printing.Margins(10, 10, 10, 10) Me.PrintDocument1.DocumentName = "中さん・ふじこ・えでん"
'' PrintPreviewControl の設定 With Me.PrintPreviewControl1 .Document = Me.PrintDocument1 .AutoZoom = True ' 複数ページある時の 1 列・1 行あたりの数 .Columns = 2 .Rows = 2 ' 開始ページ .StartPage = 1 ' アンチエイリアシング機能を使うか否か .UseAntiAlias = True End With End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged Me.SetPaperSizes() Me.SetPrinterAndPaperSize() End Sub
Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged Me.SetPrinterAndPaperSize() End Sub
'' PageSetupDialog Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click With Me.PageSetupDialog1 .Document = Me.PrintDocument1 .PrinterSettings = Me.PrintDocument1.PrinterSettings .PageSettings = Me.PrintDocument1.DefaultPageSettings
' 余白の変更を許可するか否か .AllowMargins = True ' 印刷の向きの変更を許可するか否か .AllowOrientation = True ' 給紙の変更を許可するか否か .AllowPaper = True ' プリンタの変更を許可するか否か .AllowPrinter = True ' インチ指定ではなくメートル法を使うか否か .EnableMetric = System.Globalization.RegionInfo.CurrentRegion.IsMetric ' 各余白の最小値(インチ指定) .MinMargins = New System.Drawing.Printing.Margins(10, 10, 10, 10) ' ヘルプボタンを表示するか否か .ShowHelp = True AddHandler .HelpRequest, AddressOf Me.HelpRequest ' ページ設定→プリンタの設定で[ネットワーク]ボタンを表示するか否か .ShowNetwork = True End With
If Me.PageSetupDialog1.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then If Me.ComboBox1.SelectedText <> Me.PageSetupDialog1.PrinterSettings.PrinterName Then Me.ComboBox1.SelectedItem = Me.PageSetupDialog1.PrinterSettings.PrinterName End If If Me.ComboBox2.SelectedItem.ToString() <> Me.PageSetupDialog1.PageSettings.PaperSize.PaperName Then Me.ComboBox2.SelectedItem = Me.PageSetupDialog1.PageSettings.PaperSize.PaperName End If End If End Sub
'' PrintPreviewDialog Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' ページ数をリセット Me.m_currentPage = 0
With PrintPreviewDialog1 .Document = Me.PrintDocument1 ' アイコンを表示するか否か .ShowIcon = True .Width = 500 .Height = 500 .UseAntiAlias = True End With Me.PrintPreviewDialog1.ShowDialog(Me) End Sub
'' PrintDialog Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
With Me.PrintDialog1 ' [現在のページ]オプションボタンを表示するか否か .AllowCurrentPage = True ' [ファイルへ出力]チェックボックスを表示するか否か .AllowPrintToFile = True ' [ファイルへ出力]チェックボックスの値 .PrintToFile = False ' [選択した部分]を表示するか否か .AllowSelection = True ' [ページ指定]を表示するか否か .AllowSomePages = True .Document = Me.PrintDocument1 .PrinterSettings = Me.PrintDocument1.PrinterSettings ' ヘルプボタンを表示するか否か。UseEXDialog を True にすると Win2000 以前は無視されるらしい ' でも XPSP2 でも無視された? .ShowHelp = True AddHandler .HelpRequest, AddressOf Me.HelpRequest ' [ネットワーク]ボタンを表示するか否か。UseEXDialog を True にすると Win2000 以前は無視されるらしい ' でも XPSP2 でも無視された? ' UseEXDialog に関係なく表示されないんですけど...? .ShowNetwork = True ' Windows XP style で表示するか否からしい(規定値:True) ' http://msdn2.microsoft.com/en-US/library/system.windows.forms.printdialog.useexdialog.aspx .UseEXDialog = False End With If Me.PrintDialog1.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then ' ページ数をリセット Me.m_currentPage = 0 Me.PrintDocument1.Print() End If
End Sub
' 描画処理 Private Sub PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Me.m_currentPage += 1 Select Case Me.m_currentPage Case 1 e.Graphics.DrawImage(My.Resources.中さん, e.MarginBounds) e.HasMorePages = True ' 次のページあり Case 2 e.Graphics.DrawImage(My.Resources.ふじこちゃん, e.MarginBounds) e.HasMorePages = True ' 次のページあり Case 3 e.Graphics.DrawImage(My.Resources.えでんさん, e.MarginBounds) e.HasMorePages = True ' 次のページあり Case 4 e.Graphics.DrawString("これでおわりですよー", Me.Font, Brushes.Red, 100.0F, 100.0F) e.HasMorePages = False ' 次のページなし End Select End Sub
' 用紙サイズの一覧を ComboBox2 にセット Private Sub SetPaperSizes() Dim ps As System.Drawing.Printing.PrinterSettings = Me.GetPrinterSettings() With Me.ComboBox2 .Items.Clear() .DropDownStyle = ComboBoxStyle.DropDownList For Each paperSize As System.Drawing.Printing.PaperSize In ps.PaperSizes .Items.Add(paperSize.PaperName) Next .SelectedIndex = 0 End With End Sub
' ComboBox1 の選択値を PrinterSettings 型に変換して返却 Private Function GetPrinterSettings() As System.Drawing.Printing.PrinterSettings Dim ps As System.Drawing.Printing.PrinterSettings = New System.Drawing.Printing.PrinterSettings() ps.PrinterName = DirectCast(Me.ComboBox1.SelectedItem, String) Return ps End Function
' ComboBox で選択した値を PrintDocument にセット Private Sub SetPrinterAndPaperSize() Dim printerSettings As System.Drawing.Printing.PrinterSettings = Me.GetPrinterSettings() Dim paperSize As System.Drawing.Printing.PaperSize = Nothing For Each ps As System.Drawing.Printing.PaperSize In printerSettings.PaperSizes If ps.PaperName = DirectCast(Me.ComboBox2.SelectedItem, String) Then paperSize = New System.Drawing.Printing.PaperSize(ps.PaperName, ps.Width, ps.Height) Exit For End If Next With Me.PrintDocument1 .PrinterSettings = Me.GetPrinterSettings() .DefaultPageSettings.PaperSize = paperSize End With End Sub
Private Sub HelpRequest(ByVal sender As Object, ByVal e As EventArgs) MessageBox.Show("sender:" & sender.ToString() & " HelpRequest") End Sub End Class

投稿日時 : 2007年3月2日 10:13

Feedback

# re: 印刷関連(PageSetupDialog・PrintDialog・PrintDocument・PrintPreviewControl・PrintPreviewDialog) 2007/03/02 10:49 ぽぴ王子

今日も中さんの写真が入ってるなあ…と読み進めたとたんにデカデカとミスター
ポポ…じゃなかった、中さんの写真が出てきて思わず胃液噴いた。

でも印刷関連って基本的に CrystalReports だったり ActiveReports だったり
場合によっては EXCEL だったりするので、あまり自分ではいじらないところですよね。

# re: 印刷関連(PageSetupDialog・PrintDialog・PrintDocument・PrintPreviewControl・PrintPreviewDialog) 2007/03/02 13:29 επιστημη

…中の人の下のイヌはどなた様?

# re: 印刷関連(PageSetupDialog・PrintDialog・PrintDocument・PrintPreviewControl・PrintPreviewDialog) 2007/03/02 13:45 なおこ(・∀・)

>> 王子様
> でも印刷関連って基本的に CrystalReports だったり ActiveReports だったり場合によっては EXCEL だったり
業務アプリケーションだと、そうっすね。
存在は知ってましたが、いつどういう時に使うんだろうと思っていました。

>> えぴさん
あれはエデンさんです。
えらい細くなってますけども。

# re: 印刷関連(PageSetupDialog・PrintDialog・PrintDocument・PrintPreviewControl・PrintPreviewDialog) 2007/03/02 13:56 επιστημη

∑(゚Д゚)エデンさん? エデンさんなの!?

# re: 印刷関連(PageSetupDialog・PrintDialog・PrintDocument・PrintPreviewControl・PrintPreviewDialog) 2007/03/02 20:24 なおこ(・∀・)

>> えぴさん
えでやんですよー。

タイトル  
名前  
Url
コメント