怎样打印pictureBox的图片

qiang119 2005-07-26 04:28:50
如题
...全文
174 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
seekg 2005-07-27
  • 打赏
  • 举报
回复
旁听
泡沫游走 2005-07-27
  • 打赏
  • 举报
回复
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
cyhweb 2005-07-27
  • 打赏
  • 举报
回复
这是我前一阵刚写的一个打印类,去掉了部分代码,修改一下应该能用.
cyhweb 2005-07-27
  • 打赏
  • 举报
回复
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
cyhweb 2005-07-27
  • 打赏
  • 举报
回复
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
qiang119 2005-07-27
  • 打赏
  • 举报
回复
怎样设置打印机
qiang119 2005-07-27
  • 打赏
  • 举报
回复
谢谢各位~~
泡沫游走 2005-07-26
  • 打赏
  • 举报
回复
楼上AntingZ(夕惕若)正解!
不过你要想真正应用,保证图象不失真,还需添加些东西
AntingZ 2005-07-26
  • 打赏
  • 举报
回复
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
蓝帆·雨轩 2005-07-26
  • 打赏
  • 举报
回复
up

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧