2008-11-21 9 views
8

Ich habe Schwierigkeiten, einen Epson "ESC/POS" -Drucker zum Drucken von Barcodes (mit Delphi) zu bekommen und möchte testen, ob der Drucker nicht fehlerhaft ist. Wissen Sie, wo ich ein Programm zum Ausdrucken eines Barcodes in "ESC/POS" finde? Ich denke, als letztes Mittel wird auch ein OPOS-Programm in Ordnung sein.Wo finde ich ein "ESC/POS" Epson Barcode-Testprogramm?

Auch ein Demo-Delphi-Programm, das funktioniert, wird auch in Ordnung sein. Alle Delphi-Schnipsel, die ich bisher habe, funktionieren nicht.

Der Drucker verwende ich ein Epson TM-L60II

+0

Werfen Sie einen Blick auf www.epson-pos.com für einen ESC/POS Referenz – stukelly

+0

ich den Hinweis bereits haben - es nicht auf meinem Drucker das ist nicht funktioniert, warum ich ein bereits Arbeitstestprogramm soll. –

+0

Ich habe ein Testprogramm für serielle Drucker, ist Ihr Drucker seriell? – stukelly

Antwort

7

Ich habe ein volles Programm Tests in Delphi geschrieben 5 für die TMT88 ist aber die Quelle ist abit groß hier für so hier ist das Barcode-Bits

Bitte beachten Sie, dass seine Schnipsel aus dem vollen Objekt einiger Vars/Funktionen können fehlt

um die Barcode-Zeichen

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

drucken zu erhalten an einen Drucker

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

aktualisieren

hier ein oberhalb der Steuercode Konstanten aus dem Code verloren ist, hoffentlich Namen genug beschreibend sind.

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

Vielen Dank einen Stack dafür, ich werde testen und beraten/Markup –

+1

Ich habe nur ein wenig Zeit damit verbracht, etwas darüber hinaus zu bauen, es gibt ein paar Dinge, die mit den oben genannten Codes dokumentiert werden könnten (die Barcode-Routine doesn scheint nicht zu funktionieren, wie es dort steht). Ich werde dies gut formatieren und es als separate Antwort veröffentlichen, sobald ich es getestet habe. – robsoft

+0

Hast du es zur Arbeit gebracht? Wenn nicht, kann ich den vollständigen Code (anstatt nur Schnipsel) posten. – Re0sless

1

die Microsoft POS Get for .NET 1.11, ist es ein SDK bekam, die eine Beispielanwendung enthält, die alle grundlegenden Operationen auf POS-Hardware durchführt. Ich benutze es die ganze Zeit, um zu testen, dass Geldschubladen zum Beispiel ok funktionieren.

Es ist auch ein Quellcode enthalten (in .Net), so können Sie sehen, wie sie es tun.

+0

Hallo, danke dafür, aber ich bin wirklich auf der Suche nach einem etwas leichteren Weg als all das - nur eine einfache Barcode-App. hat sich bereits bewährt. –

+0

Zunächst fragt OP nach einer Delphi-Anwendung, nicht nach einem .NET. Möchten Sie auch den in Ihrer Antwort genannten Namen des Beispielcodes angeben? – AaA