0

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

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

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

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

4

2 回答 2

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
于 2008-12-31T15:48:28.120 回答
0

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

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

于 2011-03-09T08:52:37.123 回答