首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Printer.Print裁剪到“泛型文本”打印机时,行将被裁剪。

将Printer.Print裁剪到“泛型文本”打印机时,行将被裁剪。
EN

Stack Overflow用户
提问于 2008-12-31 01:45:45
回答 2查看 2.7K关注 0票数 0

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

我只是发现它有一个错误,如果我通过"Printer.Print",将长行打印到打印机,那么行将被裁剪为前89字节/行。当我在DOS中使用、打印、复制到LPT时,它的工作原理是完美的,并且保持线条不变。

这种行为从何而来?我怎样才能修好它或者解决这个问题?我想支持所有的打印机,包括LPT,USB和网络打印机。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-09 08:52:37

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

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

票数 0
EN

Stack Overflow用户

发布于 2008-12-31 15:48:28

您需要使用Printer.TextWidth函数并将其与Printer.ScaleWidth属性进行比较,以便在Visual 6中处理此问题。

您将确保打印机设置的字体与打印机的字体过于匹配。这可能需要使用驱动程序附带的“打印机”字体之一。否则,尝试使用快递新,这是一个固定的空间字体。否则,文本宽度值将无法正确报告宽度。

另一种方法是使用Len字符串函数来计数字符数,如果超过89个字符,则自己处理截断。

就像

代码语言:javascript
复制
  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   

如果您喜欢递归函数,您可以这样编写它

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/402062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档