使用 printdocument 打印多页

Posted

技术标签:

【中文标题】使用 printdocument 打印多页【英文标题】:Printing multiple pages with printdocument 【发布时间】:2013-06-01 11:06:25 【问题描述】:

我正在制作程序,其中:在 datagridview 中选择几行后,它会检查是否选择了 1 个或多个。如果是一份,则在一页上打印两份报告(一份报告=半页) 如果多份:每页打印两份报告,根据需要打印多少页。问题是,我的代码打印了 4531456453 页的相同报告(第一行和第二行):/

基本代码示例:

yPos = 0
Do While tmpI < mydatagridview.SelectedRows.Count - 1
For Each selectedrow As DataGridViewRow In mydatagridview.SelectedRows
    Dim data as string = mydatagridview.SelectedRows(selectedrow.index).cells(1).value
    Dim data2 as string = mydatagridview.SelectedRows(selectedrow.index).cells(12).value

    e.graphics.drawstring(data, drawfont, (e.graphics.pagebound.width/2-e.graphics.measurestring(data, drawfont).width/2), 25+yPos)
    e.graphics.drawstring(data2, drawfont, (e.graphics.pagebound.width/2-e.graphics.measurestring(data2, drawfont).width/2), 50+yPos)
    yPos += e.pagebounds.height/2
    tmpI += 1 
    If yPos > e.pagebound.height/2 Then
        h = 0
        e.HasMorePages = true
        Exit Sub
    End If
Next selecedrow
Loop

截至目前,正如我之前所说,它会打印无限数量的页面,其中包含来自 SelectedRows 的数据和 data2,索引为 0 和 1。

【问题讨论】:

【参考方案1】:

希望这会有所帮助........

Sub PrintIt(ByVal e As System.Drawing.Printing.PrintPageEventArgs, byval nRow as Integer,ByVal nY As Integer) 

    Dim data as string = mydatagridview.SelectedRows(nRow).cells(1).value
    Dim data2 as string = mydatagridview.SelectedRows(nRow).cells(12).value

    e.graphics.drawstring(data, drawfont, (e.graphics.pagebound.width/2-e.graphics.measurestring(data, drawfont).width/2), 25+nY)
    e.graphics.drawstring(data2, drawfont, (e.graphics.pagebound.width/2-e.graphics.measurestring(data2, drawfont).width/2), 50+nY)

End Sub

你的代码中有一些修改..

yPos = 0

If mydatagridview.SelectedRows.Count = 1

    PrintIt(e,0,yPos)

    yPos += e.pagebounds.height/2

    PrintIt(e,0,yPos)

Elseif mydatagridview.SelectedRows.Count > 1

Dim x,n As Integer

    For x = 0 to mydatagridview.SelectedRows.Count-1
        If n = 2 Then
             e.HasMorePages = true
             n = 0
             yPos = 0
         End If 

         PrintIt(e,x,yPos)
         yPos += e.pagebounds.height/2

         n += 1
    Next

End If

【讨论】:

以上是关于使用 printdocument 打印多页的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PrintDocument 在热敏打印机上打印文本文件?

C# - 如何使用 PrintDocument 以编程方式打印现有 PDF 文件

winform使用PrintDocument控件打印

使用 PrintDocument 打印图像。如何调整图像以适合纸张尺寸

PrintDocument打印预览打印机设置和打印属性的方法

WPF 打印操作之PrintDocument,WPF获取打印机列表,WPF指定打印机