2008-11-21 26 views
8

Tôi đang cố gắng để có được một máy in Epson "ESC/POS" để in mã vạch (Sử dụng Delphi) và muốn kiểm tra nếu máy in không bị lỗi. Bạn có biết nơi tôi có thể tìm thấy một chương trình để in mã vạch trong "ESC/POS" không? Tôi cho rằng đây là phương sách cuối cùng mà một chương trình OPOS cũng sẽ được chấp nhận.Tôi có thể tìm chương trình thử nghiệm mã vạch Epson "ESC/POS" ở đâu?

Ngoài ra, một bản demo Chương trình Delphi hoạt động cũng sẽ ổn. Tất cả các đoạn Delphi tôi có cho đến nay không hoạt động.

Máy in Tôi đang sử dụng là một Epson TM-L60II

+0

Hãy xem www.epson-pos.com để tham khảo ESC/POS – stukelly

+0

Tôi đã có tài liệu tham khảo - nó không hoạt động trên máy in của tôi tại sao tôi muốn một chương trình thử nghiệm đã hoạt động. –

+0

Tôi có chương trình thử nghiệm cho máy in nối tiếp, máy in của bạn có nối tiếp không? – stukelly

Trả lời

7

I Have một chương trình kiểm tra đầy đủ viết bằng Delphi 5 cho TMT88 nhưng nguồn là Abit lớn cho ở đây vì vậy đây là các bit mã vạch

Xin lưu ý rằng như đoạn của nó từ đối tượng đầy đủ một số vars/chức năng có thể được thiếu

để có được ký tự mã vạch

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

để in bằng máy in

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

Cập nhật

Đây là một mất mã kiểm soát hằng số từ mã ở trên, hy vọng rằng các tên này đủ mô tả.

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

Cảm ơn một ngăn xếp cho điều này, tôi sẽ kiểm tra và tư vấn/đánh dấu –

+1

Tôi đã dành một chút thời gian để xây dựng một cái gì đó trên đầu trang này, có một vài điều có thể làm với tài liệu trong các mã trên (thói quen mã vạch không dường như không hoạt động, vì nó đứng ở đó). Tôi sẽ định dạng này một cách độc đáo và đăng nó như là một câu trả lời riêng biệt khi tôi đã hoàn thành kiểm tra nó. – robsoft

+0

Bạn có làm cho nó hoạt động không? nếu không, tôi có thể đăng toàn bộ mã (chứ không phải chỉ là đoạn trích). – Re0sless

1

Lấy Microsoft POS Đối với Net 1.11, nó có một SDK bao gồm một ứng dụng mẫu mà thực hiện tất cả các thao tác cơ bản trên phần cứng POS. Tôi đang sử dụng nó tất cả các thời gian để kiểm tra rằng ngăn kéo tiền mặt làm việc ok ví dụ.

Ngoài ra còn có một mã nguồn bao gồm (trong. Net), vì vậy bạn có thể xem cách họ làm điều đó.

+0

Xin chào, cảm ơn vì điều này nhưng tôi thực sự đang tìm kiếm một cách dễ dàng hơn một chút so với làm tất cả những điều đó - chỉ cần một ứng dụng mã vạch đơn giản. đã được chứng minh để làm việc với. –

+0

Trước hết, OP yêu cầu một ứng dụng delphi không phải là .NET. Bạn cũng có muốn chỉ định tên mã mẫu được đề cập trong câu trả lời của mình không? – AaA

Các vấn đề liên quan