我正在维护一个打印ZPL-II的旧vb6应用程序。
我只是发现它有一个错误,如果我通过"Printer.Print",将长行打印到打印机,那么行将被裁剪为前89字节/行。当我在DOS中使用、打印、或复制到LPT时,它的工作原理是完美的,并且保持线条不变。
这种行为从何而来?我怎样才能修好它或者解决这个问题?我想支持所有的打印机,包括LPT,USB和网络打印机。
PS。我重复检查通过打印到文件而不是LPT发送到打印机的实际字节。
发布于 2011-03-09 08:52:37
我一直在努力避免使用Printer.Print。但是使用FileSystemObject将文本文件打印到网络打印机的UNC路径。
它像奶油一样工作,但打印机必须被映射。甚至是本地的打印机。
发布于 2008-12-31 15:48:28
您需要使用Printer.TextWidth函数并将其与Printer.ScaleWidth属性进行比较,以便在Visual 6中处理此问题。
您将确保打印机设置的字体与打印机的字体过于匹配。这可能需要使用驱动程序附带的“打印机”字体之一。否则,尝试使用快递新,这是一个固定的空间字体。否则,文本宽度值将无法正确报告宽度。
另一种方法是使用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 Subhttps://stackoverflow.com/questions/402062
复制相似问题