2008-11-21 23 views
8

Tengo dificultades para obtener una impresora Epson "ESC/POS" para imprimir códigos de barras (utilizando Delphi) y quiero probar si la impresora no está defectuosa. ¿Sabes dónde puedo encontrar un programa para imprimir un código de barras en "ESC/POS"? Supongo que como último recurso, un programa OPOS también estará bien.¿Dónde puedo encontrar un programa de prueba de código de barras Epson "ESC/POS"?

Además, un programa de demostración de Delphi que funciona también estará bien. Todos los fragmentos de Delphi que tengo hasta ahora no están funcionando.

La impresora que estoy usando es una impresora Epson TM-L60II

+0

Eche un vistazo en www.epson-pos.com para una referencia ESC/POS – stukelly

+0

ya tengo la referencia - no funciona en mi impresora eso es por eso que quiero un programa de pruebas que ya están trabajando. –

+0

Tengo un programa de prueba para impresoras seriales, ¿la impresora es serial? – stukelly

Respuesta

7

Tengo un programa de pruebas completo escrito en Delphi 5 para el TMT88 de pero la fuente es un poco grande para aquí, así que aquí es los bits de código de barras

Tenga en cuenta que a medida que sus fragmentos del objeto completo algunas vars/funciones pueden faltar

para obtener los caracteres de código de barras

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

para imprimir en una impresora

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

actualización

Aquí es una perdida de constantes de código de control desde el código anterior, es de esperar los nombres son lo suficientemente descriptivo.

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 
+0

Gracias a Stack por esto, voy a probar y asesorar/marcar –

+1

Acabo de pasar algo de tiempo construyendo algo además de esto, hay algunas cosas que podrían hacer para estar documentado en los códigos anteriores (la rutina del código de barras no Parece que funciona, tal como está allí). Voy a formatearlo bien y publicarlo como una respuesta por separado una vez que haya terminado de probarlo. – robsoft

+0

¿Lo hiciste funcionar? si no, puedo publicar el código completo (en lugar de solo fragmentos). – Re0sless

1

Obtener el Microsoft POS para .NET 1.11, tiene un SDK que incluye una aplicación de ejemplo que realiza todas las operaciones básicas de hardware POS. Lo estoy usando todo el tiempo para probar que los cajones de efectivo funcionan bien, por ejemplo.

También hay un código fuente incluido (en .Net), para que pueda ver cómo lo hacen.

+0

Hola, gracias por esto, pero realmente estoy buscando una forma un poco más fácil que hacer todo eso, solo una simple aplicación de código de barras. ya probado para trabajar con. –

+0

En primer lugar, OP está solicitando una aplicación delphi no .NET. ¿Le importaría especificar el nombre del código de muestra mencionado en su respuesta? – AaA

Cuestiones relacionadas