Le linee vengono tagliate quando Stampante. Stampa su una stampante "Solo testo generico"
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.
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