当Printer.Print到“通用文本”时,行被修剪。打印机

StackOverflow https://stackoverflow.com/questions/402062

  •  03-07-2019
  •  | 
  •  

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

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

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

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

有帮助吗?

解决方案 2

我正在努力不使用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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top