首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vb.net打印多页

vb.net打印多页
EN

Stack Overflow用户
提问于 2022-05-27 04:19:48
回答 1查看 116关注 0票数 0

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

代码语言:javascript
复制
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:\Users\jtapellido\Desktop\sticker pictures\slogo1.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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-27 05:06:54

打印多个页面的逻辑非常简单。PrintPage事件处理程序只执行名称建议的操作,即打印页面。在方法的末尾,如果有更多的页面要打印,则将e.HasMorePages设置为True,仅此而已。事件将再次引发并打印另一页。

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

下面是从列表中打印记录的示例,从10到1页:

代码语言:javascript
复制
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事件处理程序的末尾减少该变量,并在该计数器大于零的情况下打印另一个页面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72400431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档