Where can I find a “ESC/POS” Epson Barcode Test Program?

匿名 (未验证) 提交于 2019-12-03 01:23:02

问题:

I am struggling to get an Epson "ESC/POS" printer to print barcodes (Using Delphi) and want to test if the printer is not faulty. Do you know where I can find a program to print a barcode in "ESC/POS"? I suppose as a last resort an OPOS program will also be OK.

Also, a demo Delphi Program that works will also be fine. All the Delphi snippets I have so far is not working.

The printer I am using is an Epson TM-L60II

回答1:

I Have a full tests program written in Delphi 5 for the TMT88's but the source is abit big for here so here is the barcode bits

Please note that as its snippets from the full object some vars/functions may be missing

To get the barcode chars

{** *    @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; 

to print to a printer

{** *    @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; 

Update

Here is a lost of control code constants from the code above, hopefully the names are descriptive enough.

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 


回答2:

Get the Microsoft POS For .Net 1.11, it's got an SDK that includes a sample application that performs all the basic operations on POS hardware. I'm using it all the time to test that cash drawers work ok for example.

There's also a source code included (in .Net), so you can see how they do it.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!