procedure getQRBitmap(printstr:string);
var
moduleSize: Integer;
slength: Integer;
Send: string;
Send_Length:String;
PicNamearray: array[0..50] of Byte;
begin
moduleSize := 8;
slength:=Length(printstr);
//存入二维码数据
Send_Length:= AnsiChar(strtoint('$'+IntToHex(slength + 3, 2)));
Send := AnsiChar($1D)+AnsiChar($28)+AnsiChar($6B)+ Send_Length + AnsiChar($00) + AnsiChar($31) + AnsiChar($50) + AnsiChar($30);
Move(Send[1], PicNamearray, Length(Send));
frmMain.IdTCPClient_xy.Socket.Send(PicNamearray, Length(Send));
frmMain.IdTCPClient_xy.Write(printstr);
//选择纠错级别
Send := AnsiChar($1D)+AnsiChar($28)+AnsiChar($6B) + AnsiChar($03) + AnsiChar($00) + AnsiChar($31) + AnsiChar($45) + AnsiChar($30);
Move(Send[1], PicNamearray, Length(Send));
frmMain.IdTCPClient_xy.Socket.Send(PicNamearray, Length(Send));
//设置二维码块大小 strtoint('$' + IntToHex(modulesize, 2)) 最后一位为二维码大小
Send := AnsiChar($1D)+AnsiChar($28)+AnsiChar($6B) + AnsiChar($03) + AnsiChar($00) + AnsiChar($31) + AnsiChar($43) + AnsiChar($0B);
Move(Send[1], PicNamearray, Length(Send));
frmMain.IdTCPClient_xy.Socket.Send(PicNamearray, Length(Send));
//打印已存入数据的二维码
Send := AnsiChar($1D) +AnsiChar($28)+AnsiChar($6B)+ AnsiChar($03) + AnsiChar($00) + AnsiChar($31) + AnsiChar($51) + AnsiChar($30);
Move(Send[1], PicNamearray, Length(Send));
frmMain.IdTCPClient_xy.Socket.Send(PicNamearray, Length(Send));
end;
以上这段代码,是delphi 连接网口打印机打印二维码的核心代码。
接下来我讲一下这段代码的由来。
最初的二维码打印是使用的图像打印,打印出来有黑块。
虽然是偶有出现,也让人接受不了。这个指令打印二维码也是无意之中发现的。需要的可以去查看。这里的指令比官网的指令全一些。问题是有部分打印机不能支持。我仅截取我需要的说明文档做保存。