当Printer.Print到“Generic Text Only”打印机时,行被修剪

时间:2008-12-31 01:45:45

标签: vb6 text printing

我正在维护一个打印ZPL-II的旧vb6应用程序。

如果我通过“ Printer.Print ”将长行打印到打印机,我发现它有一个错误,这些行将被修剪为前89字节/行。 当我在DOS中使用打印复制到LPT时,它完美无缺并保持线条。

这种行为来自哪里?我该如何解决或解决方法?我想支持所有打印机,包括LPT,USB和网络打印机。

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

2 个答案:

答案 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路径。

它像奶油一样,但打印机必须映射。甚至是本地打印机。