vb.net打印多个页面



我的问题是如何在多个页面上打印它,页面计数取决于用户在textbox9上的输入。请帮帮我。由于

Private Sub PrintDocument1_PrintPage(sender As Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
PrintDocument1.DefaultPageSettings.PaperSize = New System.Drawing.Printing.PaperSize("Paper Size Name", 300, 300)
Dim CT As Date = Now ' Use of Now.
TextBox17.Text = (CT.ToShortDateString)
Dim font1 As New Font("arial", 6, FontStyle.Bold)
Dim font2 As New Font("arial", 10, FontStyle.Bold)
Dim myBitmap As New System.Drawing.Bitmap(filename:="C:UsersjtapellidoDesktopsticker picturesslogo1.png")
Dim index As Integer = 1
Do
e.Graphics.DrawImage(image:=myBitmap, point:=New Point(70, 20))
e.Graphics.DrawString("QUARANTINE", font2, Brushes.Black, 70, 40)
e.Graphics.DrawString("MATERIAL NAME:_________________________________", font1, Brushes.Black, 70, 60)
e.Graphics.DrawString("QC No:_____________", font1, Brushes.Black, 70, 80)
e.Graphics.DrawString("LOT No:____________", font1, Brushes.Black, 70, 100)
e.Graphics.DrawString("DATE RECEIVED:______________", font1, Brushes.Black, 170, 80)
e.Graphics.DrawString("EXPIRATION DATE:____________", font1, Brushes.Black, 170, 100)
e.Graphics.DrawString("QUANTITY:____________", font1, Brushes.Black, 70, 120)
e.Graphics.DrawString("VENDOR/MANUFATURER:", font1, Brushes.Black, 70, 140)
e.Graphics.DrawString("________________________________________________", font1, Brushes.Black, 70, 160)
e.Graphics.DrawString("CONTAINER No:________________OF________________", font1, Brushes.Black, 70, 180)
e.Graphics.DrawString("STORAGE:_______________________________________", font1, Brushes.Black, 70, 200)
e.Graphics.DrawString("REMARKS:_______________________________________", font1, Brushes.Black, 70, 220)
e.Graphics.DrawString("PREPARED BY/DATE:", font1, Brushes.Black, 70, 240)
e.Graphics.DrawString("CHECKED BY/DATE:", font1, Brushes.Black, 190, 240)
e.Graphics.DrawString("____________________", font1, Brushes.Black, 70, 255)
e.Graphics.DrawString("____________________", font1, Brushes.Black, 190, 255)
e.Graphics.DrawString(TextBox1.Text, font1, Brushes.Black, 145, 58)
e.Graphics.DrawString(TextBox2.Text, font1, Brushes.Black, 110, 78)
e.Graphics.DrawString(TextBox3.Text, font1, Brushes.Black, 110, 98)
e.Graphics.DrawString(TextBox4.Text, font1, Brushes.Black, 255, 78)
e.Graphics.DrawString(TextBox5.Text, font1, Brushes.Black, 255, 98)
e.Graphics.DrawString(TextBox6.Text, font1, Brushes.Black, 120, 118)
'e.Graphics.DrawString("VENDOR/MANUFATURER:", font1, Brushes.Black, 10, 120)
e.Graphics.DrawString(TextBox7.Text, font1, Brushes.Black, 70, 158)
e.Graphics.DrawString(index, font1, Brushes.Black, 170, 178)
e.Graphics.DrawString(TextBox9.Text, font1, Brushes.Black, 255, 178)
e.Graphics.DrawString(TextBox11.Text, font1, Brushes.Black, 120, 198)
e.Graphics.DrawString(TextBox12.Text, font1, Brushes.Black, 120, 218)
'e.Graphics.DrawString("PREPARED BY/DATE:", font1, Brushes.Black, 10, 220)
'e.Graphics.DrawString("CHECKED BY/DATE:", font1, Brushes.Black, 120, 220)
e.Graphics.DrawString(TextBox15.Text + " " + TextBox17.Text, font1, Brushes.Black, 70, 253)
e.Graphics.DrawString(ComboBox2.Text + " " + TextBox17.Text, font1, Brushes.Black, 190, 253)
'e.Graphics.DrawRectangle(Pens.Red, e.MarginBounds)
index += 1
Loop Until index > TextBox9.text
End Sub

打印多个页面的逻辑非常简单。PrintPage事件处理程序正如其名称所暗示的那样,即打印页面。在该方法的最后,如果有更多的页面要打印,则将e.HasMorePages设置为True,就是这样。该事件将再次引发,并打印另一页。

由您在方法开始时提供逻辑来确定要打印的页面,并在方法结束时确定是否还有更多的页面要打印。因为您需要记住调用该方法之间的状态,所以您可能会将相关数据存储在一个或多个字段中。

下面是一个从列表中打印记录的例子,每页十个:

Private allData As New List(Of String)
Private dataToPrint As Queue(Of String)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Start printing.
PrintDocument1.Print()
End Sub
Private Sub PrintDocument1_BeginPrint(sender As Object, e As PrintEventArgs) Handles PrintDocument1.BeginPrint
'Create a new queue containing all the current data.
dataToPrint = New Queue(Of String)(allData)
End Sub
Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
'Print a maximum of 10 records.
For i = 1 To Math.Min(dataToPrint.Count, 10)
e.Graphics.DrawString(dataToPrint.Dequeue(),
Font,
Brushes.Black,
25,
i * 25)
Next
'Keep printing if and only if there are more records to print.
e.HasMorePages = (dataToPrint.Count > 0)
End Sub
Private Sub PrintDocument1_EndPrint(sender As Object, e As PrintEventArgs) Handles PrintDocument1.EndPrint
dataToPrint = Nothing
End Sub

如果您想根据TextBox的内容打印特定数量的页面,那么您可以将该内容转换为Integer并在开始时将其分配给一个字段。然后,当且仅当该计数器大于零时,可以在PrintPage事件处理程序的末尾对该变量进行递减,并打印另一个页面。

最新更新