通用的SATO条码打印软件
来源:互联网 发布:苹果6s支持4g 网络吗 编辑:程序博客网 时间:2024/04/27 09:01
通用的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;
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;
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英寸/秒,
列印各式标签、服饰吊牌、洗涤布标、或特殊用,途贴纸等工商业运用
- 通用的SATO条码打印软件
- 通用的ARGOX条码打印软件
- 条码打印软件如何修改条码线的密度
- C# SATO条码打印机(CT408i)
- labelmx条码打印软件3.7
- 条码打印机、驱动、打印软件的工作流程
- 条码打印软件工具箱窗格重新定位的教程
- 批量打印二维码的软件---使用心得(领跑条码标签打印软件)
- 标签条码打印软件如何设置打印区域
- 超市通POS软件:打印商品条码,譬如选择的条码是111,打印出来的是222。为什么会这样?
- 条码打印
- 条码打印
- 条码打印
- 打印条码
- 打印条码太长,条码枪无法识别的问题。
- QT + TSC条码打印机 打印相应的产品条码标签
- 这是打印 CODE39 的条码
- C#打印条码操作的实例浅析
- ReportX技巧(5)图表
- 通用的ARGOX条码打印软件
- _stdcall 与 _cdecl 的区别
- 占位:SQL Sever 2005同步与复制
- 转载, 路径获取
- 通用的SATO条码打印软件
- asp Ubb和Html类
- 李开复:成功是让别人离不开你
- 让我们开始用GPHONE!Android开发初试
- SQL SERVER 列出所有用户表,字段名,主键,类型,长度,小数位数等信息(转)
- 宽字符处理函数函数与普通函数对照表
- js全选
- DataHelper 代码生成器发布了
- 电脑网络进程查看