Le linee vengono tagliate quando Stampante. Stampa su una stampante "Solo testo generico"

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

  •  03-07-2019
  •  | 
  •  

Domanda

Sto eseguendo la manutenzione di una vecchia applicazione vb6 che stampa ZPL-II.

Ho appena scoperto che ha un bug se stampo lunghe righe sulla stampante con " Printer.Print " ;, le linee verranno tagliate solo ai primi 89 byte / riga. Funziona perfettamente e mantiene le linee come quando uso Stampa o Copia in DOS su LPT.

Da dove viene questo comportamento? Come posso ripararlo o risolvere il problema? Vorrei supportare tutte le stampanti tra cui LPT, USB e stampanti di rete.

PS. Controllo due volte i byte effettivi inviati alla stampante stampandoli su un file, non su LPT.

È stato utile?

Soluzione 2

Stavo lavorando per NON usare Printer.Print. Ma usando FileSystemObject per stampare un file di testo su un percorso UNC di una stampante di rete.

Funziona come una crema ma la stampante deve essere mappata. Perfino una stampante locale.

Altri suggerimenti

È necessario utilizzare la funzione Printer.TextWidth e confrontarla con la proprietà Printer.ScaleWidth per gestire questo problema in Visual Basic 6. Non esegue il wrapping automatico delle righe come la funzione DOS.

Farai in modo che il carattere impostato correttamente sulla stampante corrisponda al carattere della stampante. Ciò potrebbe richiedere l'utilizzo di una delle "stampanti" tipi di carattere forniti dal driver. Altrimenti prova a usare Courier New, che è un font spaziale fisso. In caso contrario, il valore Larghezza testo non riporterà correttamente la larghezza.

Un'alternativa è utilizzare la funzione stringa Len per contare il numero di caratteri e gestire il troncamento da soli se supera 89 caratteri.,

Qualcosa del genere

  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   

Se ti piacciono le funzioni ricorsive puoi scriverle in questo modo

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top