在Delphi中使用条码打印机打印中文标签时,由于多数打印机无内置中文字体,需要通过一个动态库fnthex32.dll(据说该动态库是Zebra公司整出来的)来把中文转换成16进制图形,然后再发送到打印机上。网络上可以找到一些如何使用该动态库的例子,这里也贴一个:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, strutils; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Edit1: TEdit; cbx1: TComboBox; Edit2: TEdit; cbx2: TComboBox; Memo1: TMemo; Button1: TButton; Button2: TButton; Memo2: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; function GETFONTHEX(chnstr: string; fontname: string; orient: integer; height: integer; width: integer; bold: integer; italic: integer; hexbuf: string): integer; stdcall; external 'fnthex32.dll'; function PrtChnStr(x, y: integer; fontname: string; height, xmf, ymf: integer; chnstr: string): string; var Form1: TForm1; implementation {$R *.dfm} function PrtChnStr(x, y: integer; fontname: string; height, xmf, ymf: integer; chnstr: string): string; var buf, ret: string; count: 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 TForm1.Button1Click(Sender: TObject); var prtstr, code: string; begin if cbx1.Text = 'Code 11' then code := '^B1' else if cbx1.Text = 'Code 39' then code := '^B3' else if cbx1.Text = 'Code 49' then code := '^B4' else if cbx1.Text = 'Code 93' then code := '^BA' else if cbx1.Text = 'Code 128' then code := '^BC' else if cbx1.Text = 'EAN-8' then code := '^B8'; prtstr := '^XA^IA6^XZ^FS^XA^FS^BY3,3^LH20,23^FS'; prtstr := prtstr + '^FO' + '30,25' + code + ',' + '70^FD' + trim(Edit1.Text) + '^FS'; prtstr := prtstr + PrtChnStr(10, 140, pchar(cbx2.Text), 14, 1, 2, pchar(Leftstr(Edit2.Text, 18))); prtstr := prtstr + '^PQ1^FS'; //打印1份 prtstr := prtstr + '^PRC^FS^XZ^FS^XA^EG^XZ'; //打印结束 Memo1.lines.clear; Memo1.lines.Add(prtstr); end; procedure TForm1.Button2Click(Sender: TObject); var prtstr: string; filehandle: integer; begin prtstr := Memo1.Text; filehandle := fileopen('LPT1', fmOpenWrite); if filehandle > 0 then filewrite(filehandle, prtstr[1], length(prtstr)) else showmessage('打开并口错误'); fileclose(filehandle); end; end.
该例子在Delphi7里运行的挺好,可是在Delphi2010上却无法正常转换。原因是在Delphi2010中默认把String都当成UnicodeString来处理。通过把转换函数的接口强制声明为AnsiString可解决该问题。
一、函数声明改为:
function GETFONTHEX(chnstr: AnsiString; fontname: AnsiString; orient: integer; height: integer; width: integer; bold: integer; italic: integer; hexbuf: AnsiString): integer; stdcall; external 'fnthex32.dll';
二、调用位置改为:
function PrtChnStr(x, y: integer; fontname: string; height, xmf, ymf: integer; chnstr: string): string;
var
buf, ret: AnsiString;
count: integer;
begin
result := '';
setlength(buf, 21 * 1024);
count := GETFONTHEX(AnsiString(chnstr), AnsiString(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;
相关推荐
"aa.rar_delphi打印_print_zebra delphi_打印_条码打印机"这个标题表明我们将深入探讨如何在Delphi程序中实现对Zebra条码打印机的控制,包括发送打印指令和处理汉字打印。 Zebra条码打印机是一款专业设备,常用于...
zebra条码打印机SDK开发包
本文将深入探讨如何使用Java编程语言调用Zebra条码打印机来打印包含中英文数字混合的条码标签,以及如何自由控制其格式和排版。 Zebra打印机是一款专业的条码和标签打印机,支持多种打印语言,其中ZPL(Zebra ...
本文将深入探讨如何使用Java语言调用Zebra条码打印机打印条码和包含中英文数字的混合标签。Zebra作为知名的条码打印机制造商,其提供的ZPL(Zebra Programming Language)是一种强大的指令集,用于控制打印机进行...
- 斑马条码打印机驱动通常支持多种操作系统,如Windows、Mac OS和Linux等,确保跨平台的使用需求。 - 驱动程序需要与打印机的硬件版本相匹配,以确保最佳性能。因此,在下载驱动时要确认打印机的具体型号和序列号...
【Zebra条码打印机编程概要】 Zebra条码打印机是一种专门用于打印条形码、二维码和其他标识的设备。它们采用独特的打印语言,比如ZPL(Zebra Programming Language)及其升级版ZPLII,来控制打印过程。这些专用语言...
本文将深入探讨如何使用Java编程语言来调用ZPL(Zebra Programming Language)条码打印机,实现中文打印以及网络打印的功能。 ZPL是Zebra公司为它的条码打印机设计的一种编程语言,用于创建和控制打印任务。ZPL主要...
Zebra作为一家知名的条码打印机制造商,提供了丰富的API和编程接口供开发者调用,以便在各种应用程序中集成条码打印功能。本文将深入探讨Zebra条码打印函数的调用方法,包括一维和二维条码的生成。 一、EPL2语言...
在IT行业中,尤其是在软件开发领域,常常需要与硬件设备进行交互,例如条码打印机。本实例将探讨如何使用C#编程语言调用ZPL(Zebra Programming Language)指令来实现中文打印以及网络打印功能,这对于物流、仓储、...
SAP中如何通过SMARTFORM 在ZEBRA 打印机打印条码
在本文中,我们将深入探讨如何使用Zebra Barcode技术来实现中文条码的打印。Zebra是一家知名的条码打印机制造商,其产品广泛应用于零售、物流、医疗等众多领域。在中文环境下的条码打印可能会遇到一些挑战,但通过...
在使用Zebra斑马条码打印机驱动时,用户可以享受到以下功能: 1. **兼容性**:该驱动程序通常兼容多种操作系统,如Windows XP到Windows 10,确保在不同环境下都能正常工作。 2. **设置与配置**:用户可以通过驱动...
ZEBRA公司成立于1969年,是一家专业开发和生产热转印条码标签打印设备的企业。公司产品以稳定性能和高品质的打印质量在业界享有盛誉。ZEBRA公司采用Element Energy Equalizer(E3)专利技术,这一技术保证了打印机...
本文将深入探讨如何使用Visual C++(VC)来实现与Zebra条码打印机的交互,以"zebra条码打印VC示例"为题,我们将解析这一过程的关键知识点。 首先,我们要理解ZPL(Zebra Programming Language),它是Zebra打印机的...
在Delphi中,可以通过串行端口(RS-232)、USB、网络(TCP/IP)等方式连接ELP条码打印机。需要使用到`TSerialPort`组件或自定义网络通信类来建立通信通道。确保正确设置波特率、数据位、停止位和校验位,以便与...
标题所指的“J2EE web调用本地斑马条码打印机打印条码”,实质上是探讨如何在Java Web应用程序中集成条形码打印功能,具体而言,是在Web应用中实现对本地斑马(Zebra)条码打印机的直接调用,以打印条形码。...
本篇文章将深入探讨如何在Delphi中实现Zebra打印机的条形码打印实例。 首先,理解Zebra打印机的工作原理至关重要。Zebra打印机通过使用特定的ZPL(Zebra Programming Language)或EPL(Eltron Programming Language...
在IT行业中,尤其是在自动化和物联网领域,条码打印机和相关的编程接口是不可或缺的一部分。本实例主要探讨的是如何使用JAVA语言来调用ZPL(Zebra Programming Language)指令,实现中文字符的打印以及网络打印功能...
在这个项目中,TEC条码打印机通过并行端口(LPT1)与计算机相连。并口是早期打印机常见的接口,它允许直接与硬件进行低级别的通信。在Windows系统中,我们需要添加一个“Generic / Text Only”打印机驱动,这是一个...