我正在维护一个打印 ZPL-II 的旧 vb6 应用程序。
我只是发现如果我通过“ Printer.Print ”将长行打印到打印机有一个错误,这些行将被修剪为仅前 89 个字节/行。当我在 DOS 中使用打印或复制到 LPT时,它可以完美运行并保持线条不变。
这种行为从何而来?我该如何解决它或解决方法?我想支持所有打印机,包括 LPT、USB 和网络打印机。
PS。我通过打印到文件而不是 LPT 来仔细检查发送到打印机的实际字节。
您需要使用 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
我正在努力不使用 Printer.Print。但是使用 FileSystemObject 将文本文件打印到网络打印机的 UNC 路径。
它像奶油一样工作,但必须映射打印机。甚至是本地打印机。