2008-12-31 105 views
0

我正在維護一個打印ZPL-II的舊vb6應用程序。Printer.Print打印到「僅限通用文本」打印機時,行會被裁剪

我只是發現它有一個錯誤,如果我通過「Printer.Print」將長行打印到打印機上,這些行只會被修整爲前89個字節/行。 它工作完美,保持線,因爲它是當我使用打印複製在DOS到LPT。

此行爲從何而來?我怎樣才能解決它或解決方法?我想支持所有打印機,包括LPT,USB和網絡打印機。

PS。我仔細檢查發送到打印機的實際字節數是否打印到文件,而不是LPT。

回答

0

我正在努力不使用Printer.Print。但使用FileSystemObject將文本文件打印到網絡打印機的UNC路徑。

它的工作原理像膏藥,但打印機必須映射。即使是本地打印機。

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