Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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 使用VB将文本打印到打印机忽略页面长度_Vb.net_Printing - Fatal编程技术网

Vb.net 使用VB将文本打印到打印机忽略页面长度

Vb.net 使用VB将文本打印到打印机忽略页面长度,vb.net,printing,Vb.net,Printing,我的任务是: 我需要将字符串打印到打印机上,然后使用第三方程序PlanetPress对其进行适当格式化。我决定使用XML格式来更好地进行操作。我的问题是,当我将字符串发送到打印机时,它似乎遵守了正常的页面宽度和高度限制,并删除了任何额外的字符和行。我需要能够打印一个文本文件,无论其长度如何,并且不以任何方式对其进行操作。这是我的打印代码: Imports Microsoft.VisualBasic Imports System.Drawing Imports System.Drawing.Pri

我的任务是:

我需要将字符串打印到打印机上,然后使用第三方程序PlanetPress对其进行适当格式化。我决定使用XML格式来更好地进行操作。我的问题是,当我将字符串发送到打印机时,它似乎遵守了正常的页面宽度和高度限制,并删除了任何额外的字符和行。我需要能够打印一个文本文件,无论其长度如何,并且不以任何方式对其进行操作。这是我的打印代码:

Imports Microsoft.VisualBasic
Imports System.Drawing
Imports System.Drawing.Printing

Public Class Print
    Friend TextToBePrinted As String

    Public Sub print(ByVal text As String, ByVal printer As String)
        TextToBePrinted = text
        Dim print As New Printing.PrintDocument
        Using (print)
            print.PrinterSettings.PrinterName = printer
            AddHandler print.PrintPage, AddressOf Me.PrintPageHandler
            print.Print()
        End Using
    End Sub

    Private Sub PrintPageHandler(ByVal sender As Object, ByVal args As Printing.PrintPageEventArgs)
        Dim myFont As New Font("Courier New", 9)
        args.Graphics.DrawString(TextToBePrinted, New Font(myFont, FontStyle.Regular), Brushes.Black, 0, 0)
    End Sub
End Class
这就是我所说的:

    Protected Sub btnPrint_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPrint.Click

    Dim printer As New Print
    printer.print(Trim(strPrint), "\\nj-nt-ppress\capture")
这里是我创建要打印的字符串的地方。它通过对象集合成员使用迭代,strPrint定义为全局变量:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim oJ As New clsJobs, oJM As clsJobs
    If Not oJ.ReadAllActiveJobs Then
        ' manage error
    Else
        Dim tr As TableRow, tc As TableCell, chk As CheckBox
        strPrint = "<?xml version='1.0' encoding='utf-8'?>" & Environment.NewLine
        strPrint = strPrint & "<JobSchedule>"
        strPrint = "<TimeStamp>'" & Now.ToString & "'</TimeStamp>"
        hdnScrollSpeed.Value = oJ.mCollection.Count
        For Each oJM In oJ.mCollection
            strPrint = strPrint & "<Job>"
            tr = New TableRow
            tc = New TableCell
            tc.Text = oJM.JobID
            tc.Visible = False
            tr.Cells.Add(tc)
            tc = New TableCell
            tc.Text = oJM.JobPriority
            tc.Font.Bold = True
            tc.CssClass() = "Priority"
            strPrint = strPrint & "<Priority>'" & oJM.JobPriority & "'</Priority>"
            tr.Cells.Add(tc)
            tc = New TableCell
            tc.Text = oJM.JobNumber
            tc.CssClass() = "JobNumber"
            tr.Cells.Add(tc)
            strPrint = strPrint & "<JobNumber>'" & oJM.JobNumber & "'</JobNumber>"
            tc = New TableCell
            tc.Text = oJM.ItemNumber
            tc.CssClass() = "ItemNumber"
            tr.Cells.Add(tc)
            strPrint = strPrint & "<ItemNumber>'" & oJM.ItemNumber & "'</ItemNumber>"
            tc = New TableCell
            tc.Text = oJM.moItem.Description
            tc.CssClass() = "ItemDescription"
            tr.Cells.Add(tc)
            strPrint = strPrint & "<ItemDescription>'" & SharedCode.StripCommas(oJM.moItem.Description) & "'</ItemDescription>"
            tc = New TableCell
            tc.Text = oJM.moMold.MoldNumber
            tc.CssClass() = "Mold"
            tr.Cells.Add(tc)
            'tc = New TableCell
            'tc.Text = oJM.moInsert.InsertLetter
            'tc.CssClass() = "Insert"
            'tr.Cells.Add(tc)
            strPrint = strPrint & "<Mold>'" & oJM.moMold.MoldNumber & "'</Mold>"
            tc = New TableCell
            tc.Text = oJM.Quantity
            tc.CssClass() = "Quantity"
            tr.Cells.Add(tc)
            strPrint = strPrint & "<Quantity>'" & oJM.Quantity & "'</Quantity>"
            tc = New TableCell
            tc.Text = oJM.moMachine.MachineNumber
            tc.CssClass() = "Machine"
            tr.Cells.Add(tc)
            strPrint = strPrint & "<Machine>'" & oJM.moMachine.MachineNumber & "'</Machine>"
            tc = New TableCell
            'chk = New CheckBox
            'chk.Checked = oJM.isRunning
            'chk.Enabled = False
            'tc.Controls.Add(chk)
            If oJM.isRunning Then
                tc.Text = "<img src='img/running.png' />"
            End If
            tc.CssClass() = "Running"
            tr.Cells.Add(tc)
            strPrint = strPrint & "<Running>'" & oJM.isRunning & "'</Running></Job>"
            tblMstrJobsList.Rows.Add(tr)
        Next
        strPrint = strPrint & "</JobSchedule>"
    End If
    Exit Sub
End Sub
Protected Sub Page_Load(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
Dim oJ作为新clsJobs,oJM作为clsJobs
如果不是oJ.ReadAllActiveJobs,则
“管理错误
其他的
Dim tr作为表格行,tc作为表格单元格,chk作为复选框
strPrint=”“&Environment.NewLine
strPrint=strPrint&“
strPrint=“”&Now.ToString&“
hdnScrollSpeed.Value=oJ.mCollection.Count
对于oJ.mCollection中的每个oJM
strPrint=strPrint&“
tr=新表格行
tc=新表单元格
tc.Text=oJM.JobID
tc.Visible=False
tr.Cells.Add(tc)
tc=新表单元格
tc.Text=oJM.JobPriority
tc.Font.Bold=True
tc.CssClass()=“优先级”
strPrint=strPrint&“'”和oJM.JobPriority&“”
tr.Cells.Add(tc)
tc=新表单元格
tc.Text=oJM.JobNumber
tc.CssClass()=“作业编号”
tr.Cells.Add(tc)
strPrint=strPrint&“'”和oJM.JobNumber&“'
tc=新表单元格
tc.Text=oJM.ItemNumber
tc.CssClass()=“ItemNumber”
tr.Cells.Add(tc)
strPrint=strPrint&“'”和oJM.ItemNumber&“'
tc=新表单元格
tc.Text=oJM.moItem.Description
tc.CssClass()=“ItemDescription”
tr.Cells.Add(tc)
strPrint=strPrint&“'”和SharedCode.stripcomas(oJM.moItem.Description)&“”
tc=新表单元格
tc.Text=oJM.moMold.MoldNumber
tc.CssClass()=“模具”
tr.Cells.Add(tc)
'tc=新表单元格
'tc.Text=oJM.moInsert.InsertLetter
'tc.CssClass()=“插入”
'tr.Cells.Add(tc)
strPrint=strPrint&“'”和oJM.moMold.MoldNumber&“'
tc=新表单元格
tc.Text=oJM.数量
tc.CssClass()=“数量”
tr.Cells.Add(tc)
strPrint=strPrint&“'”和oJM.Quantity&“'
tc=新表单元格
tc.Text=oJM.moMachine.MachineNumber
tc.CssClass()=“机器”
tr.Cells.Add(tc)
strPrint=strPrint&“'”和oJM.moMachine.MachineNumber&“”
tc=新表单元格
'chk=新复选框
'chk.Checked=oJM.isRunning
'chk.Enabled=False
'tc.Controls.Add(chk)
如果oJM正在运行,则
tc.Text=“”
如果结束
tc.CssClass()=“正在运行”
tr.Cells.Add(tc)
strPrint=strPrint&“'”和oJM.isRunning&“”
tblMstrJobsList.Rows.Add(tr)
下一个
strPrint=strPrint&“
如果结束
出口接头
端接头
我会发布文本文件输出的截图,但没有足够的声誉。
我在debug中查看了字符串,它包含了所有正确的信息。一旦它被发送到打印机是当我丢失数据。任何帮助都将不胜感激。多谢各位

它似乎遵守了正常的页面宽度和高度限制,并删除了任何额外的字符和行。
我看不出您在代码中设置了任何打印机页边距等。您可能应该逐行打印文本,而不是将整条文本发送到打印机。谢谢您的回复。我也试过,在每一行之后放一个回车,但我遇到了一个类似的问题,大约72行之后,它被切断了。在某个地方申报没有保证金行吗?或者使用另一种打印方式?我已经提到过:逐行打印文本。如果必须继续打印到下一页,则需要循环行并设置HasMorePages属性。