2008-11-21 7 views
8

J'ai du mal à obtenir une imprimante Epson "ESC/POS" pour imprimer des codes à barres (en utilisant Delphi) et que vous voulez tester si l'imprimante n'est pas défectueuse. Savez-vous où je peux trouver un programme pour imprimer un code à barres dans "ESC/POS"? Je suppose qu'en dernier recours, un programme OPOS sera également OK.Où puis-je trouver un programme de test de code-barres Epson "ESC/POS"?

En outre, un programme de démonstration Delphi qui fonctionne sera également bien. Tous les extraits de Delphi que j'ai jusqu'ici ne fonctionnent pas.

L'imprimante J'utilise est un Epson TM-L60II

+0

Jetez un coup d'oeil sur www.epson-pos.com pour une référence ESC/POS – stukelly

+0

J'ai déjà la référence - il ne fonctionne pas sur mon imprimante thats pourquoi je veux un programme d'essai de travail déjà. –

+0

J'ai un programme de test pour les imprimantes série, est votre série d'imprimantes? – stukelly

Répondre

7

J'ai un programme complet de tests écrits en Delphi 5 pour, mais la source de la TMT88 est abit grand pour ici, donc voici les bits de codes à barres

S'il vous plaît noter que ses extraits de l'objet complet des vars/fonctions peuvent manquer

pour obtenir les caractères de codes à barres

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

à imprimer sur une imprimante

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

Mise à jour

Voici une perte de constantes de code de contrôle du code ci-dessus, nous espérons les noms sont assez descriptifs.

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

Merci à un Stack pour cela, je vais tester et conseiller/balisage –

+1

Je viens de passer un peu de temps à construire quelque chose en plus, il y a quelques choses qui pourraient être documentées dans les codes ci-dessus (la routine de codes à barres doesn ne semble pas fonctionner, car il se trouve là). Je vais le mettre en forme bien et le poster comme une réponse distincte une fois que j'ai fini de le tester. – robsoft

+0

L'avez-vous fait fonctionner? sinon je peux poster le code complet (plutôt que des extraits). – Re0sless

1

Obtenez Microsoft POS pour .NET 1.11, il possède un SDK qui inclut un exemple d'application qui effectue toutes les opérations de base sur le matériel de point de vente. Je l'utilise tout le temps pour tester que les tiroirs fonctionnent bien par exemple.

Il y a aussi un code source inclus (dans .Net), ainsi vous pouvez voir comment ils le font.

+0

Salut, merci pour cela, mais je suis vraiment à la recherche d'un moyen wee-bit plus facile que de faire tout cela - juste une simple application de codes à barres. déjà prouvé de travailler avec. –

+0

Tout d'abord, OP demande une application Delphi et non un .NET, aussi voudriez-vous spécifier le nom de l'exemple de code mentionné dans votre réponse? – AaA

Questions connexes