Private PrintPageSettings As New PageSettings
Private PagesetupDialog1 As New PageSetupDialog
Private PrintDocument1 As New Printing.PrintDocument
Private PrintPreviewDialog1 As New PrintPreviewDialog
'打印Picturebox1的图片
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
e.Graphics.DrawImage(Me.PictureBox1.Image, 0, 0)
End Sub
'页面设置
Private Sub btnPrintSetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrintSetup.Click
PagesetupDialog1.PageSettings = PrintPageSettings
PagesetupDialog1.ShowDialog()
' PrintPageSettings = PagesetupDialog1.PageSettings
End Sub
'打印
Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
AddHandler PrintDocument1.PrintPage, AddressOf PrintDocument1_PrintPage
'载入当前页面设置
PrintDocument1.DefaultPageSettings = PagesetupDialog1.PageSettings
PrintDocument1.Print()
End Sub
'打印预览
Private Sub btnPrintPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrintPreview.Click
AddHandler PrintDocument1.PrintPage, AddressOf PrintDocument1_PrintPage
'载入当前页面设置
PrintDocument1.DefaultPageSettings = PrintPageSettings
'为打印预览载入文档
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog()
End Sub
Public Sub PrintView()
Dim psb As New Button
Dim i As Integer
psb.Name = "psb"
psb.Text = "页面设置"
psb.Location = New System.Drawing.Point(248, 3)
psb.Size = New System.Drawing.Size(50, 20)
psb.FlatStyle = Button.ShadowsFlatStyle.XpStyle
psb.ForeColor = Color.Blue
ppd.Controls.Add(psb)
psb.BringToFront()
AddHandler psb.Click, AddressOf psb_Click
pdm.DefaultPageSettings.Landscape = False
pdm.DefaultPageSettings.Margins = New System.Drawing.Printing.Margins(40, 40, 40, 40)
Select Case PrintType
Case "PrintPicture"
表宽 = PrintPicture.Width
If 表宽 > (pdm.DefaultPageSettings.PaperSize.Width - pdm.DefaultPageSettings.Margins.Left - pdm.DefaultPageSettings.Margins.Right) AndAlso PrintPicture.Width > PrintPicture.Height Then
pdm.DefaultPageSettings.Landscape = True
End If
Case "PrintDataTable"
'代码省略
Case "PrintDataGrid"
'代码省略
Case "PrintListView"
'代码省略
End Select
ppd.Document = pdm
ppd.WindowState = FormWindowState.Maximized
ppd.ShowDialog()
End Sub
Private Sub pdm_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdm.PrintPage
Dim MyPen As New System.Drawing.Pen(Color.Red, 2)
Dim i As Integer
Dim k As Integer
Dim top As Integer = e.MarginBounds.Y
Dim PrintStringFormat As New System.Drawing.StringFormat
Dim rectf As System.Drawing.RectangleF
Dim rect As System.Drawing.Rectangle
Dim PageCountText As String
PrintStringFormat.Alignment = StringAlignment.Center
PrintStringFormat.LineAlignment = StringAlignment.Center
PrintStringFormat.FormatFlags = StringFormatFlags.LineLimit
Select Case PrintType
Case "PrintPicture"
PageCountText = "第1/1页"
If PrintPicture.Width > e.MarginBounds.Width OrElse PrintPicture.Height > (e.MarginBounds.Height - HeadFont.GetHeight(e.Graphics) - PageCountFont.GetHeight(e.Graphics) - 行距) Then
rect = New System.Drawing.Rectangle(e.MarginBounds.X, top + HeadFont.GetHeight(e.Graphics), PrintPicture.Width * Math.Min(e.MarginBounds.Width / PrintPicture.Width, (e.MarginBounds.Height - HeadFont.GetHeight(e.Graphics) - PageCountFont.GetHeight(e.Graphics) - 行距) / PrintPicture.Height), PrintPicture.Height * Math.Min(e.MarginBounds.Width / PrintPicture.Width, (e.MarginBounds.Height - HeadFont.GetHeight(e.Graphics) - PageCountFont.GetHeight(e.Graphics) - 行距) / PrintPicture.Height))
If rect.Width < e.MarginBounds.Width Then
rect.X = e.MarginBounds.X + (e.MarginBounds.Width - rect.Width) / 2
End If
e.Graphics.DrawString(HeadText, HeadFont, New System.Drawing.SolidBrush(HeadColor), rect.X + (rect.Width - e.Graphics.MeasureString(HeadText, HeadFont).Width) / 2, top)
e.Graphics.DrawString(DateText, DateFont, New System.Drawing.SolidBrush(DateColor), rect.X + (rect.Width - e.Graphics.MeasureString(DateText, DateFont).Width), top + e.Graphics.MeasureString(HeadText, HeadFont).Height - e.Graphics.MeasureString(DateText, DateFont).Height - 行距)
e.Graphics.DrawString(PageCountText, PageCountFont, New System.Drawing.SolidBrush(PageCountColor), rect.X + (rect.Width - e.Graphics.MeasureString(PageCountText, PageCountFont).Width) / 2, e.MarginBounds.Top + e.MarginBounds.Height - PageCountFont.GetHeight(e.Graphics))
Else
rect = New System.Drawing.Rectangle(e.MarginBounds.X + (e.MarginBounds.Width - PrintPicture.Width) / 2, top + HeadFont.GetHeight(e.Graphics), PrintPicture.Width, PrintPicture.Height)
e.Graphics.DrawString(HeadText, HeadFont, New System.Drawing.SolidBrush(HeadColor), rect.X + (rect.Width - e.Graphics.MeasureString(HeadText, HeadFont).Width) / 2, top)
e.Graphics.DrawString(DateText, DateFont, New System.Drawing.SolidBrush(DateColor), rect.X + (rect.Width - e.Graphics.MeasureString(DateText, DateFont).Width), top + e.Graphics.MeasureString(HeadText, HeadFont).Height - e.Graphics.MeasureString(DateText, DateFont).Height - 行距)
e.Graphics.DrawString(PageCountText, PageCountFont, New System.Drawing.SolidBrush(PageCountColor), rect.X + (rect.Width - e.Graphics.MeasureString(PageCountText, PageCountFont).Width) / 2, e.MarginBounds.Top + e.MarginBounds.Height - PageCountFont.GetHeight(e.Graphics))
End If
e.Graphics.DrawImage(PrintPicture, rect)
Case "PrintDataTable"
'代码省略
Case "PrintDataGrid"
'代码省略
Case "PrintListView"
'代码省略
End Select
End Sub
Private Sub psb_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim psd As New PageSetupDialog
psd.Document = pdm
psd.PageSettings.Margins = System.Drawing.Printing.PrinterUnitConvert.Convert(psd.PageSettings.Margins, System.Drawing.Printing.PrinterUnit.ThousandthsOfAnInch, System.Drawing.Printing.PrinterUnit.HundredthsOfAMillimeter)
If psd.ShowDialog = DialogResult.OK Then
If PrintType = "PrintPicture" Then
If 表宽 > (pdm.DefaultPageSettings.PaperSize.Width - pdm.DefaultPageSettings.Margins.Left - pdm.DefaultPageSettings.Margins.Right) AndAlso PrintPicture.Width > PrintPicture.Height Then
pdm.DefaultPageSettings.Landscape = True
Else
pdm.DefaultPageSettings.Landscape = False
End If
Else
If 表宽 > (pdm.DefaultPageSettings.PaperSize.Width - pdm.DefaultPageSettings.Margins.Left - pdm.DefaultPageSettings.Margins.Right) Then
pdm.DefaultPageSettings.Landscape = True
Else
pdm.DefaultPageSettings.Landscape = False
End If
End If
ppd.Document = pdm
Else
psd.PageSettings.Margins = System.Drawing.Printing.PrinterUnitConvert.Convert(psd.PageSettings.Margins, System.Drawing.Printing.PrinterUnit.HundredthsOfAMillimeter, System.Drawing.Printing.PrinterUnit.ThousandthsOfAnInch)
End If
End Sub
Private Sub pdm_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles pdm.BeginPrint
当前页 = 0
当前行 = 0
End Sub
End Class
Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
Dim p As New Print(曲线1.bmp)
p.HeadText = "打印曲线"
p.PrintView()
p = Nothing
End Sub
Public Class Print
Dim WithEvents pdm As New System.Drawing.Printing.PrintDocument
Dim WithEvents ppd As New PrintPreviewDialog
Dim PrintDataGrid As System.Windows.Forms.DataGrid
Dim PrintListView As System.Windows.Forms.ListView
Dim PrintDataTable As System.Data.DataTable
Dim PrintPicture As System.Drawing.Bitmap
Friend HeadText As String = "打印报表"
Friend HeadFont As New Font("楷体_GB2312", 18, FontStyle.Bold)
Friend HeadColor As Color = Color.Red
Friend DateText As String = Format(Now, "yyyy-MM-dd")
Friend DateFont As New Font("宋体", 14)
Friend DateColor As Color = Color.Blue
Friend DataHeadText() As String
Friend DataHeadFont As New Font("宋体", 16)
Friend DataHeadColor As Color = Color.Blue
Friend DataFont As New Font("宋体", 12)
Friend DataColor As Color = Color.Black
Friend PageCountFont As New Font("宋体", 14)
Friend PageCountColor As Color = Color.Blue
Dim 表宽 As Integer
Dim 页数 As Integer
Dim 当前页 As Integer
Dim 行数 As Integer
Dim 列宽() As Integer
Dim 左边距() As Integer
Dim 行距 As Integer = 2
Dim 页行数 As Integer
Dim 当前行 As Integer
Dim PrintType As String
Public Sub New()
MyBase.New()
End Sub
Public Sub New(ByVal pc As System.Drawing.Bitmap)
MyBase.New()
Me.PrintPicture = pc
Me.PrintType = "PrintPicture"
End Sub
Public Sub New(ByVal dg As System.Windows.Forms.DataGrid)
MyBase.New()
Me.PrintDataGrid = dg
Me.PrintType = "PrintDataGrid"
End Sub
Public Sub New(ByRef lv As System.Windows.Forms.ListView)
MyBase.New()
Me.PrintListView = lv
Me.PrintType = "PrintListView"
End Sub
Public Sub New(ByRef dt As System.Data.DataTable, ByVal colWidth() As Integer)
MyBase.New()
Me.PrintDataTable = dt
Me.列宽 = colWidth
Me.PrintType = "PrintDataTable"
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
'打印Picturebox1的图片
e.Graphics.DrawImage(Me.PictureBox1.Image, 0, 0)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'打印
Dim PrintDocument1 As New Printing.PrintDocument
AddHandler PrintDocument1.PrintPage, AddressOf PrintDocument1_PrintPage
PrintDocument1.Print()
End Sub