我正在維護一個打印ZPL-II的舊vb6應用程序。Printer.Print打印到「僅限通用文本」打印機時,行會被裁剪
我只是發現它有一個錯誤,如果我通過「Printer.Print」將長行打印到打印機上,這些行只會被修整爲前89個字節/行。 它工作完美,保持線,因爲它是當我使用打印或複製在DOS到LPT。
此行爲從何而來?我怎樣才能解決它或解決方法?我想支持所有打印機,包括LPT,USB和網絡打印機。
PS。我仔細檢查發送到打印機的實際字節數是否打印到文件,而不是LPT。
我正在維護一個打印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