如何在一个打印件中打印身份证集合,如Microsoft Office Publisher?

时间:2017-10-31 07:33:09

标签: vb.net datagridview report printdocument

在我的申请表中,我有一张用于创建员工身份证的表格。一切都很好,但我通过将所有选定的身份证添加到页面来解决打印问题。就像在1页中打印大约4张横向卡一样非常容易,这可以使用打印文档方法和rdlc报告来完成。我使用printdocument的PrintPage事件来完成工作和rdlc报告的参数。但每张照片仅限4张卡片。但我想要的是让我们说有二十名新员工/员工需要身份证,我想一次打印出来。

我尝试了什么?

PrintDocument方法

将所有ID卡添加到DataGridView,然后在PrintDocument的PrintPage事件上使用此代码

Dim i as integer = 25
For j as Integer = 0 To dgv.rowcount - 1
   e.Graphics.DrawImage(dgv.rows(j).Cells(0).Value, 25, i, 375, 236)
   i += 241
Next
i = 25
  

但每次打印最多只能打印4张卡片。我尝试使用e.HasMorePages = True,但无法让它达到我想要的效果。

RDLC报告方法

创建DataSet,DS1,并添加一个与我的datagridview列名相同的列名的表,然后使用DataSet,DS1创建一个rdlc报告,并在其中添加一个表,只显示要显示的图像列。

  

但不幸的是,这是本案中最大的失败,因为它甚至无法显示单一图片。所以我可以选择在报表上创建图片并使用参数方法从表单中获取值,这再次限制我每次打印超过4张卡片。

1 个答案:

答案 0 :(得分:2)

以下是在多个页面上打印项目列表的示例。在这种情况下,它完成了四页到一页。

Const ITEMS_PER_PAGE As Integer = 4

Private items As List(Of Object)
Private itemIndex As Integer

Private Sub PrintDocument1_BeginPrint(sender As Object, e As PrintEventArgs) Handles PrintDocument1.BeginPrint
    'Start from the beginning of the list.
    itemIndex = 0
End Sub

Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    For i = 1 To ITEMS_PER_PAGE
        If itemIndex = items.Count Then
            'We're done.
            Exit For
        End If

        Dim item = items(itemIndex)

        'Print item here.

        itemIndex += 1
    Next

    'Print another page if and only if we are not at the end of the list.
    e.HasMorePages = itemIndex < items.Count
End Sub

请注意itemIndexPrintPage事件处理程序的调用之间保持其值。