在我的申请表中,我有一张用于创建员工身份证的表格。一切都很好,但我通过将所有选定的身份证添加到页面来解决打印问题。就像在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张卡片。
答案 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
请注意itemIndex
在PrintPage
事件处理程序的调用之间保持其值。