首页 > 解决方案 > 如何在 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

标签: imageprintingdatagridview

解决方案


推荐阅读