我正在维护一个打印ZPL-II的旧vb6应用程序。
如果我通过“ Printer.Print ”将长行打印到打印机,我发现它有一个错误,这些行将被修剪为前89字节/行。 当我在DOS中使用打印或复制到LPT时,它完美无缺并保持线条。
这种行为来自哪里?我该如何解决或解决方法?我想支持所有打印机,包括LPT,USB和网络打印机。
PS。我通过打印到文件而不是LPT来仔细检查发送到打印机的实际字节数。
答案 0 :(得分:0)
您需要使用Printer.TextWidth函数并将其与Printer.ScaleWidth属性进行比较,以便在Visual Basic 6中处理此问题。它不像DOS函数那样自动换行。
您将确保打印机设置的字体与打印机的字体完全匹配。这可能需要使用驱动程序附带的“打印机”字体之一。否则尝试使用Courier New这是一个固定的空格字体。否则,文本宽度值将无法正确报告宽度。
另一种方法是使用Len字符串函数计算字符数,并在超过89个字符时自行处理截断。
像是
之类的东西 Do Until LineToPrint = ""
TempD = Len(LineToPrint)
If TempD > 89 Then
Print Mid$(LineToPrint,1, 89)
LineToPrint = Right$(LineToPrint,TempD-89)
Else
Print LineToPrint
LineToPrint = ""
End If
Loop
如果您喜欢递归函数,可以像这样编写
Private Sub PrintLine(ByVal LineToPrint As String, ByVal Width As Integer)
TempD = Len(LineToPrint)
If TempD > Width Then
Printer.Print Mid$(LineToPrint, 1, Width)
LineToPrint = Right$(LineToPrint, TempD - Width)
PrintLine LineToPrint, Width
Else
Printer.Print LineToPrint
End If
End Sub
答案 1 :(得分:0)
我正在努力不使用Printer.Print。但是使用FileSystemObject将文本文件打印到网络打印机的UNC路径。
它像奶油一样,但打印机必须映射。甚至是本地打印机。