Dove posso trovare un & # 8220; ESC / POS & # 8221; Programma di test del codice a barre Epson?
-
08-07-2019 - |
Domanda
Sto lottando per ottenere un Epson "ESC / POS" stampante per stampare codici a barre (utilizzando Delphi) e si desidera verificare se la stampante non è difettosa. Sai dove posso trovare un programma per stampare un codice a barre in " ESC / POS " ;? Suppongo che come ultima risorsa anche un programma OPOS andrà bene.
Inoltre, anche un programma Delphi demo che funziona andrà bene. Tutti i frammenti di Delphi che ho finora non funzionano.
La stampante che sto usando è una Epson TM-L60II
Soluzione
Ho un programma di test completo scritto in Delphi 5 per TMT88 ma la fonte è abbastanza grande per questo, quindi ecco i bit del codice a barre
Si noti che poiché i suoi frammenti dall'oggetto completo potrebbero mancare alcune variabili / funzioni
Per ottenere i caratteri del codice a barre
{**
* @param a ean13 barcode numeric value
* @return the escpos code for the barcode print
* Description uses escpos code, return code needed to print a ean13 barcode
*}
function TPrintEscPosToPort.getBarcodeEscPosCode(l_ean13:String):String;
var
l_return:String;
begin
l_return := CHR(29) + 'k' + CHR(67) + CHR(12);
l_return := l_return + l_ean13; // Print bar code
l_return := l_return + l_ean13; // Print bar code number under thge barcode
Result := l_return
end;
per stampare su una stampante
{**
* @param Printer Name, Item be printed, Cut the papers after the cut, #no of copies to print
* @return boolen, true if it printed
* Description prints a test page to the tysso printer
*}
function TPrintEscPosToPort.escPosPrint(const l_printer, l_textToPrint :String;l_cutPaper:Boolean=true;l_copies:integer=1): Boolean;
var
l_pPort,l_pName,l_tmp:String;
i,x:integer;
PrinterFile: TextFile;
begin
// set result to false so any thing other then a good print will be false
Result:= FALSE;
try
//Find if the printer exists, else set to defult -1
i := Printer.Printers.IndexOf(l_printer);
if (i > -1) then
begin
Printer.PrinterIndex := i;
l_pName := Printer.Printers[i]; //Get the printer name (incase its the defult and not the one passed)
l_pPort := Self.getPrinterPort(l_pName) ; // get the port name from the reg
end;
// If true add headers and footers to the passed text
if (Self.aPrintHeadersFooters) then
begin
l_tmp := Self.getHeader()
+ l_textToPrint + Self.GetFooter();
end
else
begin
l_tmp := l_textToPrint;
end;
//Send the Document To the printer
try
for x:= 1 to l_copies do //Print multi-copies
Begin
//Assign the file to a tmp file in the printer port
if (length(trim(l_pPort)) > 0) then AssignFile(PrinterFile,l_pPort)
else
begin
//only use if we cant get the port
//(may look bad as ctrl codes are still in place)
AssignPrn(PrinterFile);
l_tmp := Self.stripEscPos(l_tmp);
end;
Rewrite(PrinterFile);
try
//Send the passed Text to the printer
WriteLn(PrinterFile,l_tmp);
if (Self.aPrinterReset) then
WriteLn(PrinterFile,escReset); // Reset the printer alignment
if (l_cutPaper) then
WriteLn(PrinterFile,escFeedAndCut); //Cut the paper if needed
finally
CloseFile(PrinterFile);
Result:= true;
end;
end;
except
end;
except
end;
end;
Aggiorna
Ecco una perdita di costanti del codice di controllo dal codice sopra, si spera che i nomi siano abbastanza descrittivi.
const
escNewLine = chr(10); // New line (LF line feed)
escUnerlineOn = chr(27) + chr(45) + chr(1); // Unerline On
escUnerlineOnx2 = chr(27) + chr(45) + chr(2); // Unerline On x 2
escUnerlineOff = chr(27) + chr(45) + chr(0); // Unerline Off
escBoldOn = chr(27) + chr(69) + chr(1); // Bold On
escBoldOff = chr(27) + chr(69) + chr(0); // Bold Off
escNegativeOn = chr(29) + chr(66) + chr(1); // White On Black On'
escNegativeOff = chr(29) + chr(66) + chr(0); // White On Black Off
esc8CpiOn = chr(29) + chr(33) + chr(16); // Font Size x2 On
esc8CpiOff = chr(29) + chr(33) + chr(0); // Font Size x2 Off
esc16Cpi = chr(27) + chr(77) + chr(48); // Font A - Normal Font
esc20Cpi = chr(27) + chr(77) + chr(49); // Font B - Small Font
escReset = chr(27) + chr(64); //chr(27) + chr(77) + chr(48); // Reset Printer
escFeedAndCut = chr(29) + chr(86) + chr(65); // Partial Cut and feed
escAlignLeft = chr(27) + chr(97) + chr(48); // Align Text to the Left
escAlignCenter = chr(27) + chr(97) + chr(49); // Align Text to the Center
escAlignRight = chr(27) + chr(97) + chr(50); // Align Text to the Right
Altri suggerimenti
Ottieni Microsoft POS per .Net 1.11, ha un SDK che include un'applicazione di esempio che esegue tutte le operazioni di base sull'hardware POS. Lo sto usando tutto il tempo per testare che i cassetti della cassa funzionano bene per esempio.
C'è anche un codice sorgente incluso (in .Net), quindi puoi vedere come lo fanno.