首页 > 解决方案 > 自动填充贴纸并打印多个

问题描述

我有一张信息表,对应于我想在通用贴纸上打印的详细信息。所以假设贴纸有姓名、姓氏、员工编号,我的表有 10 行,表示有 10 名员工。我将打开对话框页面进行打印并且我没有选择打印机,在选择打印机后,我希望它从每一行中获取保存的值打印每个员工信息的标签。

目前,我只编写了常规打印和创建信息表的程序。我只是想知道打印循环会如何进行,我认为它应该是这样的:

   Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    PrintDialog1.Document = PrintDocument1

    PrintDialog1.PrinterSettings = PrintDocument1.PrinterSettings



    If PrintDialog1.ShowDialog = DialogResult.OK Then

        PrintDocument1.DefaultPageSettings.Landscape = True
        For Each row In Table1
            Employeename.Text = NameRow
            Employeelastname.text = LastNameRow
            EnployeeNumber.text = EmployeeNumberCell
            PrintDocument1.Print()
        Next

    End If
End Sub

标签: vb.netprinting

解决方案


顾名思义,打印一页的PrintPage事件。PrintDocument如果要打印多页,则需要多次引发该事件。当有更多页面要打印时,您可以通过在事件处理程序中设置e.HasMorePages属性来做到这一点。True这是一个从 a 每页打印一条记录的简单示例DataTable

'The data to be printed.
Private table As DataTable

'The index of the row to print.
Private rowIndex As Integer

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'Start printing at the first row.
    rowIndex = 0

    'Print the data.
    PrintDocument1.Print()
End Sub

Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    'Get the current row.
    Dim row = table.Rows(rowIndex)

    'Print the current row.
    e.Graphics.DrawString(row.Field(Of String)("SomeColumn"), Me.Font, Brushes.Black, 50, 50)

    rowIndex += 1

    'Print another page if and only if there is another row to be printed.
    e.HasMorePages = rowIndex < table.Rows.Count
End Sub

您可以修改PrintPage事件处理程序中的实际打印代码,以在您想要的任何布局中打印您想要的任何数据。如果您有多个要打印的值,那么您可以多次调用e.Graphics.DrawX方法。如果它是您要打印的所有文本,那么它将全部DrawString调用,但您需要DrawImage打印图像和DrawRectangle等,用于打印形状。


推荐阅读