Printer.Print打印到“仅限通用文本”打印机时,行会被裁剪

问题描述:

我正在维护一个打印ZPL-II的旧vb6应用程序。Printer.Print打印到“仅限通用文本”打印机时,行会被裁剪

我只是发现它有一个错误,如果我通过“Printer.Print”将长行打印到打印机上,这些行只会被修整为前89个字节/行。 它工作完美,保持线,因为它是当我使用打印复制在DOS到LPT。

此行为从何而来?我怎样才能解决它或解决方法?我想支持所有打印机,包括LPT,USB和网络打印机。

PS。我仔细检查发送到打印机的实际字节数是否打印到文件,而不是LPT。

我正在努力不使用Printer.Print。但使用FileSystemObject将文本文件打印到网络打印机的UNC路径。

它的工作原理像膏药,但打印机必须映射。即使是本地打印机。

您需要使用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