Printer.Printを“ Generic Text Only”にすると、行がトリミングされます。プリンター

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

  •  03-07-2019
  •  | 
  •  

質問

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

" Printer.Print "でプリンタに長い行を印刷すると、バグがあることがわかりました。行は最初の89バイト/行のみにトリミングされます。 完璧に動作し、DOSで Print または Copy を使用してLPTに行を維持します。

この動作はどこから来たのですか?修正または回避策を教えてください。 LPT、USB、ネットワークプリンターを含むすべてのプリンターをサポートしたい。

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

役に立ちましたか?

解決 2

Printer.Printを使用しないように回避しました。ただし、FileSystemObjectを使用してテキストファイルをネットワークプリンターのUNCパスに印刷します。

クリームのように機能しますが、プリンターをマッピングする必要があります。ローカルプリンターでも。

他のヒント

Visual Basic 6でこの問題を処理するには、Printer.TextWidth関数を使用してPrinter.ScaleWidthプロパティと比較する必要があります。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