如何利用条码打印机驱动打印条码?(斑马打印机ZPL语言)(100分)

V

vclsaga

Unregistered / Unconfirmed
GUEST, unregistred user!
程序如下:
printer.begin
Doc;
printer.Canvas.Font.Name:= '宋体';
printer.canvas.Font.Size:=20;
printer.Canvas.TextOut(50,250,'^XA^FO10,10^BCN,100^FD12345^FS^XZ');
printer.Canvas.TextOut(50,350,'12345');
printer.EndDoc;
但只能打印出文本内容,而无法识别ZPL语言,无法打印出条码,请问题是什么原因???
在线等,谢谢!!!!
 
那是直接控制码, 不是windows点阵驱动的打印机;
1. 如果是串口连接的, 可以使用串口发送条码打印的控制码;
2. 并口(打印口)连接的要麻烦一点, 但也可以做到的...
3. 有可能的情况: 是利用斑马打印机提供的驱动(DLL调用);
-----------------------------------------------------------------
总之是: 要理解点阵驱动打印机与直接控制码打印机的区别;
 
最简单的:去下个条形码字体库,你把它当普通打印机对待就是了
 
TO:新世纪
先谢谢你的回答,现在问题是打印机用USB进行连接,如果连接是并口,我可以直接将控制码发送到端口并进行打印,现在问题是我用的是调用WINDOWS驱动,然后进行打印,但按我上面的方法,无法将控制码发送到打印机,打出来的只是控制码的文本内容,不能被打印机识别。
TO:XJSD12
谢谢你的回答,客户不想下载多余字体!
 
比较直接的办法是: 直接用Windows API(FileOpen, FileWrite, FileClose)来操作打印机(驱动端口)
 
缺少code39字体
加上就可以了
我以前遇到过
 
TO:新世纪
Windows API代码是不是如下:
assignFile(lpt,'LPT1');
rewrite(lpt);
write(lpt,'^XA^FO10,10^BCN,100^FD12345^FS^XZ');
CloseFile(lpt);
这只对并口有效,如果用USB连接打印机,则无效!!!
 
楼主啊, 方法基本差不多, 不一定是'LPT1', 一定要在系统的控制面板中找到USB条码打印的驱动接口, 等同其他普通打印机的'LPT1'接口...
assignFile是Delphi比较简便的方法, 最好用FileOpen(Windows API);
另外: 有些大侠也许没有用过条码打印机, 回答的自然是偏了;
// 楼主的问题不是使用普通打印机打印条码, 而是用专用的条码打印机打印条码;
// 从计算机到条码打印机输出的是打印控制文本, 而不是普通点阵打印机的点阵数据;
 
谢谢新世纪老兄!问题解决!!!如果还有别的问题,还望多多指教!!!再谢!!![:)]
 
怎么解决的,我也想知道
 
打开串口后
procedure TMainFrm.SendString(const str: string);
begin
if Comm1.WriteCommData(Pchar(str), Length(str)) then
begin
FTXNum := FTXNum + Length(str);
end;
end;
procedure TMainFrm.Button2Click(Sender: TObject);
var
RandValue: integer;
PrintZL: string;
PrintStr : TStringList;
begin
//生成条码并进行打印
Randomize;
//先要初始化
RandValue := Random(899999999)+100000000;
PrintStr := TStringList.Create;
PrintStr.Add('1B 40');
PrintStr.Add('1D 48 00');
PrintStr.Add('1D 77 02');
PrintStr.Add('1D 68 58');
PrintStr.Add('1D 6B 49 09 ' + DecToHex(IntToStr(RandValue)));
//PrintStr.Add('1B 4A 50');
//PrintStr.Add('OD OA');
PrintZL := PrintStr.Text;
//PrintZL := Print39Code(edit1.Text).Text;
SendString(HexStrToStr(PrintZL));
SendString(IntToStr(RandValue));
SendString(HexStrToStr('1B 4A 50'));
PrintStr.Free;
sleep(300);
//
end;
 
利用自带的dll文件里面的函数即可完成你所要的功能。
 
问题已解决,谢谢各位!!!!改天将我的源代码帖上!
 
顶部