0

ZPL-II を出力する古い vb6 アプリケーションをメンテナンスしています。

「 Printer.Print」で長い行をプリンターに出力すると、行が最初の 89 バイト/行のみにトリミングされるというバグがあることがわかりました。DOSでLPTへの印刷またはコピーを使用すると、完璧に機能し、行をそのまま保持します。

この振る舞いはどこから来たのですか?どうすれば修正または回避できますか? LPT、USB、ネットワーク プリンターを含むすべてのプリンターをサポートしたいと考えています。

PS。LPTではなくファイルに出力して、プリンターに送信された実際のバイト数を再確認します。

4

2 に答える 2

0

Visual Basic 6でこの問題を処理するには、Printer.TextWidth関数を使用し、Printer.ScaleWidthプロパティと比較する必要があります。DOS関数のように自動行折り返しは行われません。

プリンタが設定されているフォントがプリンタのフォントと正しく一致していることを確認します。これには、ドライバーに付属している「プリンター」フォントの1つを使用する必要がある場合があります。それ以外の場合は、固定スペースフォントであるCourierNewを使用してみてください。そうしないと、テキスト幅の値が幅を正しく報告しません。

別の方法は、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 に答える