image - 如何在 vb.net 中打印带有文本的 datagridview 图像列
问题描述
我的代码是
Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim actualWidth As Integer = DGVUserData.Columns.Cast(Of DataGridViewColumn).Sum(Function(c) c.Width) Dim percent as Decimal = (( 100 / actualWidth) * e.MarginBounds.Width) / 100 Dim header As String = "Driver Database Details" Dim footer As String Dim startX As Integer = e.MarginBounds.Left Dim startY As Integer = e.MarginBounds.Top Dim r As长方形
Dim headerFont As New Font(DGVUserData.Font.FontFamily, 14, FontStyle.Regular, GraphicsUnit.Pixel)
Dim szf As SizeF = e.Graphics.MeasureString(header, headerFont)
e.Graphics.DrawString(header, headerFont, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - szf.Width) / 2, startY - szf.Height)
footer = "Printed By " & System.Windows.Forms.SystemInformation.ComputerName + " " + "Page " & pageCounter.ToString
szf = e.Graphics.MeasureString(footer, headerFont)
e.Graphics.DrawString(footer, headerFont, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - szf.Width) / 2, e.MarginBounds.Bottom + 5)
startY += 5
'this is the text alignment
Dim sf As New StringFormat
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center
Dim gridFont As New Font(DGVUserData.Font.FontFamily, DGVUserData.Font.Size * percentage, FontStyle.Regular, GraphicsUnit.Pixel)
If startRow = 0 Then
For x As Integer = 0 To DGVUserData.Columns.Count - 1
r.X = startX
r.Y = startY
r.Width = DGVUserData.Columns(x).Width * percentage
r.Height = DGVUserData.Rows(0).Height
e.Graphics.DrawRectangle(Pens.Black, r)
e.Graphics.DrawString(DGVUserData.Columns(x).HeaderText, gridFont, Brushes.Black, r, sf)
startX += r.Width
Next
startY += r.Height
End If
For y As Integer = startRow To DGVUserData.Rows.Count - 1
If y = DGVUserData.NewRowIndex Then Continue For
startX = e.MarginBounds.Left
For x As Integer = 0 To DGVUserData.Columns.Count - 1
r.X = startX
r.Y = startY
r.Width = DGVUserData.Columns(x).Width * percentage
r.Height = DGVUserData.Rows(0).Height
e.Graphics.DrawRectangle(Pens.Black, r)
e.Graphics.DrawString(If(DGVUserData.Rows(y).Cells(x).Value.ToString, ""),
gridFont, Brushes.Black, r, sf)
startX += r.Width
Next
startY += r.Height
If startY >= e.MarginBounds.Bottom - 10 Then
If y < DGVUserData.Rows.Count - 1 Then
e.HasMorePages = True
pageCounter += 1
startRow = y + 1
Exit For
End If
End If
Next
End Sub
解决方案
推荐阅读
- http - 当客户端通过 Fiddler 发送重复请求时会发生什么?
- gcc - Objdump / 链接器映射文件符号校验和
- javascript - 在反应中使用axios调用测试功能
- r - 检查字符串是否出现在 data.table 的任何列(第一列除外)中
- pandas - 如何仅使用特定列从现有 df 创建新 df
- python - 熊猫滚动应用返回 ndarrays 的自定义函数
- rest - REST API 最佳实践
- sqlplus - 如何修复 sqlplus 中此列列表错误没有匹配的唯一键或主键?
- php - 在每个循环中运行两个数组
- excel - 在excel vba中进行网页抓取,无论如何要加快进程?