通用的SATO條碼列印軟體

來源:互聯網
上載者:User

通用的SATO條碼列印軟體

SATO條碼印表機,是一款比較好用的印表機。很多工礦企業,機場等對穩定性和效能要求比較高的場所,都會選用。偷下懶,目前還沒有把它做成一個通用的條碼列印軟體。SATO條碼印表機本身不提供類似於驅動程式介面的列印方式,只能使用底層的印表機指令集來列印,剛開始摸索了一段,最後還是解決了問題。

我把最關鍵的原始碼貼出來,Delphi的:

1 列印部分

procedure TPkFrm.WriteToPrinter(psPrinterName,psStr: string; piPrintQty: integer);
var
  Handle: THandle;
  N: DWORD;
  DocInfo1: TDocInfo1;
  lsPrintESC: string;
begin
  //PrinterName: 印表機名字(如:EPSON LQ-1600K等),S為印表機的ESC指令集等。
//  ShowMessage(IntToStr(iPrintBarcode )+'  =  '+Printer.Printers[iPrintBarcode] + ' iPrintLabel = '+IntToStr(iPrintLabel ));
  if not OpenPrinter(PChar(psPrinterName), Handle, nil) then
    CreateError('列印條碼時出錯!無法得到條碼印表機'+IntToStr(GetLastError),nil,1);
  with DocInfo1 do begin
    pDocName := PChar('SATO條碼正在列印:'+psStr);
    pOutputFile := nil;
    pDataType := 'RAW';
  end;

  StartDocPrinter(Handle, 1, @DocInfo1);
  StartPagePrinter(Handle);

  //列印指令:開始
  lsPrintESC := Chr(27)+'A';
  WritePrinter(Handle, PChar(lsPrintESC), Length(lsPrintESC), N);
  //page size
  lsPrintESC := Chr(27)+'A1'+'1216'+'3776';
  WritePrinter(Handle, PChar(lsPrintESC), Length(lsPrintESC), N);
  //1,2,3
  lsPrintESC := Chr(27)+'#E3';
  WritePrinter(Handle, PChar(lsPrintESC), Length(lsPrintESC), N); 

  //aduject start point
  //  S := Chr(27)+'A3V'+edt9.Text +'H'+edt10.Text;
  //  WritePrinter(Handle, PChar(S), Length(S), N);

  //列印指令:條碼   {BG Code128
  //S := Chr(27)+'V0020' + #27 + 'H0001' + #27 + 'BG04260' + '2ZC100126614134523507';
  lsPrintESC := Chr(27)+'V0040' +Chr(27)+'H0001'+ Chr(27)+'BG04256' + psStr;
  WritePrinter(Handle, PChar(lsPrintESC), Length(lsPrintESC), N);

  //列印指令:條碼字元
  lsPrintESC := Chr(27)+'V0320'+Chr(27)+'H0320'+ Chr(27)+'L0101'+Chr(27)+'P03'+Chr(27)+'WB1'+psStr;
  WritePrinter(Handle, PChar(lsPrintESC), Length(lsPrintESC), N);

  //列印指令:份數
  lsPrintESC := Chr(27)+'Q'+IntToStr(piPrintQty);
  WritePrinter(Handle, PChar(lsPrintESC), Length(lsPrintESC), N);

  //列印指令:結束
  lsPrintESC := Chr(27)+'Z';
  WritePrinter(Handle, PChar(lsPrintESC), Length(lsPrintESC), N);

  EndPagePrinter(Handle);
  EndDocPrinter(Handle);
  ClosePrinter(Handle);
end;

 

2 調用列印部分

 

procedure TPkFrm.PrintMode2(psPrintFile: string; piPrintLabelQty,piPrintBarcodeQty: integer);
var
  liOriPrinterIndex: integer;
begin
  liOriPrinterIndex := Printer.PrinterIndex; //把原來的預設印表機號儲存起來,以便恢複

  //注意,這種方式列印,是通過印表機順序號來自動分配要打的內容,所以不必指定一個預設印表機
  //每打一個內容,動態指定一個預設印表機

  //1 先打標籤
  //打標籤前,先把打標籤的印表機設定為預設值,注意這一點很重要,要指導使用者正確設定哪台是標籤用的印表機
  try
    Printer.PrinterIndex:=GetPrintIndexFromName(sPrintLabel);
    BarCodePrint.LoadFromFile(psPrintFile);
    SetLabelColor(CDSMaster.FieldByName('OldDescr').AsString);
    BarCodePrint.PrepareReport;
    //列印份數,根據使用者要求來定。一般單排列印兩份,雙排列印一份
    BarCodePrint.PrintPreparedReport('',piPrintLabelQty,True,frall)
  except
    CreateError('列印標籤時出錯!可能是標籤印表機編號設定不正確等原因',nil,1);
  end;

  //2 再打條碼
  //打標籤前,先把打條碼的印表機設定為預設值,注意這一點很重要,要指導使用者正確設定哪台是條碼用的印表機
  try
    //Printer.PrinterIndex:=iPrintBarcode;
    //列印份數,根據標籤來定。一個標籤要打兩個條碼
    WriteToPrinter(sPrintBarcode,CDSMaster.FieldbyName('NewPkCode').AsString,piPrintBarcodeQty); //條碼印表機順序號,條碼內容,份數
  except
    CreateError('列印條碼時出錯!可能是條碼印表機編號設定不正確等原因',nil,1);
  end;

  //恢複到原先設定的預設印表機
  try
    Printer.PrinterIndex := liOriPrinterIndex;
  except
  end;
end;

 

主要支援SATO CL系列的,如SATO CL612e條碼印表機,SATO CL408e/412e 條碼印表機,SATO CL608e/612e 條碼印表機。

 

SATO CL608e/612e 條碼印表機 
寬幅工業級條碼印表機,熱轉印/熱敏方式,列印速度可達 4英寸-8英寸/秒,
列印各式標籤、服飾吊牌、洗滌布標、或特殊用,途貼紙等工商業運用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.