搜索
您的当前位置:首页正文

斑马打印机条码打印

来源:尚车旅游网


Delphi斑马打印机条码打印程序

1.打印界面:

2.代码如下(附斑马打印机基本指令): unit Unit1; interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, strutils, ExtCtrls,JPEG;

type

TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Edit1: TEdit; cbx1: TComboBox;

1 / 21

Edit2: TEdit; cbx2: TComboBox; Memo1: TMemo; Button1: TButton; Button2: TButton;

ComboBox1: TComboBox; Label6: TLabel; Button3: TButton; GroupBox6: TGroupBox; Label7: TLabel; cbxJMX: TComboBox; Edit3: TEdit; Button4: TButton; Image1: TImage; Button5: TButton;

procedure Button1Click(Sender:

2 / 21

TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

functionGETFONTHEX(chnstr: string;fontname: string;orient:

3 / 21

integer;height: integer; width: integer; bold: integer; italic: integer; hexbuf: string):

integer; stdcall;external 'fnthex 32.dll';

function PrtChnStr(x, y: integer; fontname: string; height, xmf, ymf: integer; chnstr: string): string;

functionGetQRCode(constr: PWideChar;Path: PChar):

4 / 21

Integer;stdcall;external'GenQRCode.dll'; var

Form1: TForm1; tupian: TJPEGImage; implementation {$R *.dfm}

function PrtChnStr(x, y: integer; fontname: string; height, xmf, ymf: integer; chnstr: string): string; var buf, ret: string; count:

5 / 21

integer; begin result : = '';

setlength(buf, 21 * 1024); count :

= GETFONTHEX(chnstr, fontname, 0, height, 0, 1, 0, buf); if count > 0 then begin ret :

= Copy(buf, 1, count); result:

=ret+'^FO'+inttostr(x)+','+inttostr(y)+'^XGOUTSTR01,'+inttostr(xmf) + ',' + inttostr(ymf) + '^FS';

end; end;

//--------------------生成指令--------------------------------------------- procedure TForm

6 / 21

1.Button1Click(Sender: TObject); var

prtstr, code ,sl: string; begin if edit 3.Text='' then begin

showmessage('打印数量不能为空'); edit 3.SetFocus ; Edit 3.SelectAll; exit; end; try

7 / 21

StrToFloat(Edit 3.Text); except Edit 3.SetFocus; Edit 3.SelectAll;

showmessage('打印数量不正确,请重新录入!'); Exit; end; if cbx

1.Text = 'Code 11' then code : = '^B1' else if cbx

1.Text = 'Code 39' then code :

8 / 21

= '^B3' else if cbx

1.Text = 'Code 49' then code : = '^B4' else if cbx

1.Text = 'Code 93' then code : = '^BA' else if cbx

1.Text = 'Code 128' then code : = '^BC' else if cbx

1.Text = 'EAN-8' then code : = '^B8';

9 / 21

if (cbxJMX.Text<>'A') and (cbxJMX.Text<>'B') then cbxJMX.Text: ='A' ; prtstr :

= '^XA^JM'+cbxJMX.Text+'^IA6^XZ^FS^XA^FS^BY2,3^LH20,23^FS';//^JM设定打印分辨率(点/毫米)

A、B;^BY设置条码宽度和高度;^LH打印机开始位置 prtstr :

= prtstr + '^FO60,10' + code + ',' + '70^FD' + trim(Edit

1.Text) + '^FS';//^FO20,30表示ZEBAR这行字距标签纸边的位置; ^FD定义打印内容指令prtstr :

= prtstr + PrtChnStr(80, 100, pchar(cbx 2.Text), 14, 1, 2, pchar(Edit 2.Text));//字体和文字信息 prtstr :

= prtstr + '^PQ'+edit 3.Text+'^FS'; //^PQ打印份数 prtstr :

10 / 21

= prtstr + '^PRC^FS^XZ'; //^PRC打印速度^FS-数据域分隔命令(换行)prtstr : = prtstr + '^XA^EG^FS^XZ'; //^EG删除所有打印机上的存储档 Memo 1.lines.clear; Memo

1.lines.Add(prtstr); end;

//---------------------------------打印---------------------------- procedure TForm 1.Button2Click(Sender: TObject); var prtstr: string; filehandle: integer; THandle;

11 / 21

begin prtstr : = Memo 1.Text;

try//---选择打印端口COM 1、LPT1

= CreateFile(PChar(ComboBox

1.Text), GENERIC_WRITE, 0, nil,OPEN_EXISTING, 0, 0); finally end; end;

procedure TForm 1.Button3Click(Sender: TObject); begin Memo 1.Lines.Clear;

12 / 21

end;

//----生成二维条码-------------------- procedure TForm 1.Button4Click(Sender: TObject); var s:

WideString ; Path : string ; lpt: textfile; begin s : = Edit 2.Text ; Image

13 / 21

1.Picture.Assign(nil); Path :

= ExtractFilePath(ParamStr (0))+'tmp.bmp';

GetQRCode(PWideChar(s),PChar(path)); Image

1.Picture.Bitmap.LoadFromFile(Path); end;

//------------打印二维条码------------------------ procedure TForm 1.Button5Click(Sender: TObject); var prtstr: string; filehandle: integer;

14 / 21

THandle; begin prtstr :

='^XA^BQN,5,5^FO30,60^FDMM,A'+ Trim(edit 1.Text) +'^FS^XZ'; //^BQN打印二维码 {prtstr :

= prtstr + PrtChnStr(80, 100, pchar(cbx 2.Text), 14, 1, 2, pchar(Edit 2.Text)); prtstr :

= prtstr + '^PQ1^FS'; prtstr :

= prtstr + '^PRC^FS^XZ'; prtstr :

= prtstr + '^XA^EG^FS^XZ'; } try//---选择打印端口COM 1、LPT1

15 / 21

= CreateFile(PChar(ComboBox

1.Text), GENERIC_WRITE, 0, nil,OPEN_EXISTING, 0, 0); finally end; end; end.

3.斑马打印机基本指令

ZPL指令及条码选择整理(斑马S4M) ^XA

^LH50,20^FO10,50^BY2, 2.0,200^BCC^FD>890^FS ^CW1,E: MSUNG

24.FNT^CI17^FO40,270^A1N,20,20^F8^FD测试文本^FS ^XZ

ZPL指令是区分大小写的。 ^XA和^XZ是开始和结束标记。

16 / 21

这些ZPL指令可以参考下面的标记,主要解释一下^BC是128码,128码分为A子集、B子集、C子集,不同的子集打印的条码长度不同,打印leng%2=0(就是打印的数字个数是双数)的数字最好使用128码C子集(条码短),>5就是由默认的B子集转成C子集,如果打印的是单数1>,1是使用B子集打印,然后>5转成C子集。

如果使用程序打印的时候,编码方式应该使用UTF-8,否则打不出中文。 1.

格式指令以^开始 控制指令以~开始 2.

^XA ^XZ标签开始、标签结束 ^FD ^FS字段数据开始、结束 例:

^FDThis is an example.^FS 3.

^XA开始标签格式

^LH0,0原点位置(Label Home) ^FO203,203文本位置(Field Origin) ^ABN,30,30字体类型与大小

17 / 21

^FDExample^FS打印的正文字符串(Field Data) ^XZ结束标签格式 4.

各个域之间以^FS进行分隔 5.

^XA开始标签格式 ^LH0,0原始位置 ^FO203,203条形码位置 ^BY3,

2.4,50条形码系统设定[预置] ^B3N,Y,,YCode 39条形码 ^FDABC123^FS条形码数据 ^XZ结束标签格式

6.一般为^FO定义位置,然后定义字体或定义条码格式,然后定义内容^FS结束(分隔),即^FO与^FS之间的是一段内容(域)的显示。

7.xx那个 ^XA ^LH20,20

18 / 21

^FO20,10^AF^FDZEBRA^FS ^FO20,60

^B3,,40,, //40为条码高度,为主要参数,其他默认(Barcode 39) ^FDAA001^FS

//^PQnum,,,PQnum,,num, ^XZ

采用默认参数,后面的逗号可以省略 8.序列号^SNv,n,z v: 起始值n:

increment/decrement z: 是否显示前置的零 9. ^XA ^LH20,20

^FO20,10^AF^FDZEBRA^FS ^FO20,60

19 / 21

^B3,,40 ^FDAA001^FS ^FO20,200^AF

^SN001,1,Y^FS//1,决定了序列号递增值为1 ^PQ4,,2//2决定了序列号的重复数,4决定总页数 ^XZ

打印效果为序列号, 001两页002两页,共四页 10. ^XA ^LH0,0 ^FO20,20 ^BY2, 2.0,35

//第一个选项设置窄条窄空整体的宽度,可以理解为x方向的放大系数 //第三个选项设置条码高度 ^BC//128码

^FD1>^FS//默认使用B子集,>5转到C子集

20 / 21

^XZ

21 / 21

因篇幅问题不能全部显示,请点此查看更多更全内容

Top