Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 从ArrayList打印多页_Vb.net_Printing_Arraylist - Fatal编程技术网

Vb.net 从ArrayList打印多页

Vb.net 从ArrayList打印多页,vb.net,printing,arraylist,Vb.net,Printing,Arraylist,首先让我从我不是vb.net开发人员开始。事实上,我从未接受过VB艺术方面的培训。也就是说,我正在开发一个非常简单的应用程序,它获取一个csv文件并将单个列解析为一个数组列表。现在,我需要获取该数组列表并打印数组列表中每个项目的单独页面(无预览)。因此数组列表中的每个项都有自己的页面 这是我到目前为止得到的。我肯定我远远看不到,因为我不知道如何把这个变成多页 Private Sub Print() Dim PrintPreviewSelected As Boolean = Fal

首先让我从我不是vb.net开发人员开始。事实上,我从未接受过VB艺术方面的培训。也就是说,我正在开发一个非常简单的应用程序,它获取一个csv文件并将单个列解析为一个数组列表。现在,我需要获取该数组列表并打印数组列表中每个项目的单独页面(无预览)。因此数组列表中的每个项都有自己的页面

这是我到目前为止得到的。我肯定我远远看不到,因为我不知道如何把这个变成多页

    Private Sub Print()
    Dim PrintPreviewSelected As Boolean = False
    'Set the doc to print
    Dim pDoc As New PrintDocument
    pDoc.PrintController = New StandardPrintController   'turns off the printing page x of y dialog
    Try
        Using sr As New StreamReader(file)
            defPrinter = sr.ReadToEnd()
        End Using
    Catch e As Exception
    End Try
    If defPrinter = "" Then
        If Me.PrintDialog1.ShowDialog() = DialogResult.OK Then
            pDoc.PrinterSettings.PrinterName = Me.PrintDialog1.PrinterSettings.PrinterName
        End If
    Else
        pDoc.PrinterSettings.PrinterName = defPrinter
    End If
    pDoc.DefaultPageSettings.Landscape = True
    pDoc.DefaultPageSettings.Margins = New Margins(40, 10, 10, 10)
    pDoc.OriginAtMargins = True
    AddHandler pDoc.PrintPage, AddressOf PrintSett
    If PrintPreviewSelected Then
        PrintPreviewDialog1.Document = pDoc
        PrintPreviewDialog1.UseAntiAlias = True
        PrintPreviewDialog1.WindowState = FormWindowState.Maximized
        PrintPreviewDialog1.ShowDialog()
    Else
        If txtFile.Text <> "" Then
            pDoc.Print()
        Else
            MessageBox.Show("You must select a file first", "Select a file.")
        End If
    End If
    RemoveHandler pDoc.PrintPage, AddressOf PrintSett
End Sub

Private Sub PrintSett(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    Dim fnt10 As Font = New Font("Courier New", 34, FontStyle.Regular)
    e.Graphics.DrawString("", fnt10, Brushes.Black, 318, 412)
End Sub
Private子打印()
Dim PrintPreviewSelected为布尔值=False
'将文档设置为打印
Dim pDoc作为新的打印文档
pDoc.PrintController=New StandardPrintController'关闭打印页面x/y对话框
尝试
使用sr作为新的StreamReader(文件)
defPrinter=sr.ReadToEnd()
终端使用
捕获e作为例外
结束尝试
如果defPrinter=“”,则
如果Me.PrintDialog1.ShowDialog()=DialogResult.OK,则
pDoc.PrinterSettings.PrinterName=Me.PrintDialog1.PrinterSettings.PrinterName
如果结束
其他的
pDoc.PrinterSettings.PrinterName=defPrinter
如果结束
pDoc.DefaultPageSettings.横向=真
pDoc.DefaultPageSettings.Margins=新页边距(40,10,10,10)
pDoc.com=True
AddHandler pDoc.PrintPage,PrintSett的地址
如果选择打印预览,则
PrintPreviewDialog1.Document=pDoc
PrintPreviewDialog1.UseAntiAlias=True
PrintPreviewDialog1.WindowsState=FormWindowsState.Maximized
PrintPreviewDialog1.ShowDialog()
其他的
如果为txtFile.Text“”,则
pDoc.Print()
其他的
Show(“必须先选择文件”,“选择文件”)
如果结束
如果结束
RemoveHandler pDoc.PrintPage,PrintSett的地址
端接头
私有子打印集(ByVal sender作为对象,ByVal e作为System.Drawing.Printing.PrintPageEventArgs)
Dim fnt10字体=新字体(“Courier New”,34,FontStyle.Regular)
e、 图形.抽绳(“”,fnt10,画笔.黑色,318412)
端接头

任何帮助都将不胜感激!我知道我没有给你们打下任何基础,但坦率地说,我迷失了方向。谢谢大家

按照马特宗的建议,我终于找到了答案

Dim PageNumber As Integer = 1
Dim morePage As String

Private Sub PrintSett(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    Dim ReportFont As New Font("Arial", 45, FontStyle.Regular)
    Dim VerticalPrintLocationSingle As Single = 412
    Dim HorizontalPrintLocationSingle As Single = e.MarginBounds.Left
    Dim TextString As String
    Dim sngCenterPage As Single

    If customerList.Count > (PageNumber) Then

        If customerList.Item(PageNumber) IsNot "" Then
            TextString = customerList.Item(PageNumber)
            Console.WriteLine(customerList.Item(PageNumber))
            sngCenterPage = Convert.ToSingle(e.PageBounds.Width / 2 - e.Graphics.MeasureString(customerList.Item(PageNumber), ReportFont).Width / 2)
            PageNumber += 1
            morePage = True
        End If

    Else
        morePage = False
        customerList.Clear()
    End If

    e.Graphics.DrawString(TextString, ReportFont, Brushes.Black, sngCenterPage, VerticalPrintLocationSingle)
    e.HasMorePages = morePage
End Sub

再次感谢

您应该在
子打印集
中逐行执行。。它将增加Y位置,并且当大于纸张高度时,您应该执行
e.hasmorepages=true
…您可以详细说明的任何方式。我试着在打印中运行一个for-each循环,但是它会导致打印循环。哈哈,谢谢!我跳过了整个“Hello World”教程。