如何解决vb.net打印画布
我将尽可能描述我的问题。 我在vb.net中创建了一个Windows窗体,有一个面板,该面板包含一个画布,该画布具有一些绘制的内容,我想将画布打印为pdf或其他格式,我的问题不是打印机,而是发送要打印的画布,这是我尝试过的一些代码,但我认为这样做不好,它打印出一个空白页。这是一些代码(代码是由printdocument1.Print()通过单击按钮启动的):
Private Sub PrintDocument1_PrintPage(sender As System.Object,e As System.Drawing.Printing.PrintPageEventArgs) Handles printdocument1.PrintPage
Dim b As New Bitmap(pnlC.Width,pnlC.Height)
pnlC.DrawToBitmap(b,pnlC.ClientRectangle)
e.Graphics.DrawImage(b,New Point(0,0))
For Each ctrl As Control In pnlC.Controls
If TypeOf ctrl Is Canvas Then
ctrl.Tag = Int((ctrl.Top + ctrl.Height) / printdocument1.DefaultPageSettings.Bounds.Height) + 1
e.Graphics.DrawImage(DirectCast(ctrl,PictureBox).Image,New PointF(ctrl.Left,ctrl.Top - StartPosition))
End If
Next
Dim grp As Graphics = pnlC.CreateGraphics()
Dim pnlSize As Size = pnlC.Size
bitmap = New Bitmap(pnlC.Width,pnlC.Height,grp)
grp = Graphics.FromImage(bitmap)
Dim panelLocation As Point = PointToScreen(pnlC.Location)
grp.CopyFromScreen(panelLocation.X,panelLocation.Y,pnlSize)
e.HasMorePages = False
End Sub
画布内部内容的一些代码:
Protected Overrides Sub drawNode(n As Node,iPosition As AbstractVector)
Dim pos As Point = GraphToScreen(TryCast(iPosition,FDGVector2))
Dim canvas As Graphics = __graphicsProvider()
Dim r As Single = n.Data.radius
SyncLock canvas
If r = 0! Then
r = If(n.Data.Neighborhoods < 30,n.Data.Neighborhoods * 9,n.Data.Neighborhoods * 7)
r = If(r = 0,20,r)
End If
Dim pt As New Point(pos.X - r / 2,pos.Y - r / 2)
Dim rect As New Rectangle(pt,New Size(r,r))
Call canvas.FillPie(n.Data.Color,rect,360)
'Call canvas.DrawImage(n.Data.image,rect)
Call canvas.DrawString("test",New Font("Times New Roman",12),New SolidBrush(Color.Black),pt)
End SyncLock
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。