`

在Delphi中使用Zebra条码打印机打印中文

 
阅读更多

在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_打印_条码打印机

    "aa.rar_delphi打印_print_zebra delphi_打印_条码打印机"这个标题表明我们将深入探讨如何在Delphi程序中实现对Zebra条码打印机的控制,包括发送打印指令和处理汉字打印。 Zebra条码打印机是一款专业设备,常用于...

    zebra条码打印机SDK开发包

    zebra条码打印机SDK开发包

    Java调用Zebra条码打印机打印条码、中英文数字条码混合标签

    本文将深入探讨如何使用Java编程语言调用Zebra条码打印机来打印包含中英文数字混合的条码标签,以及如何自由控制其格式和排版。 Zebra打印机是一款专业的条码和标签打印机,支持多种打印语言,其中ZPL(Zebra ...

    Java调用Zebra条码打印机打印条码、中英文数字条码混合标签(2)

    本文将深入探讨如何使用Java语言调用Zebra条码打印机打印条码和包含中英文数字的混合标签。Zebra作为知名的条码打印机制造商,其提供的ZPL(Zebra Programming Language)是一种强大的指令集,用于控制打印机进行...

    Zebra条码打印机驱动

    - 斑马条码打印机驱动通常支持多种操作系统,如Windows、Mac OS和Linux等,确保跨平台的使用需求。 - 驱动程序需要与打印机的硬件版本相匹配,以确保最佳性能。因此,在下载驱动时要确认打印机的具体型号和序列号...

    Zebra条码打印机编程概要

    【Zebra条码打印机编程概要】 Zebra条码打印机是一种专门用于打印条形码、二维码和其他标识的设备。它们采用独特的打印语言,比如ZPL(Zebra Programming Language)及其升级版ZPLII,来控制打印过程。这些专用语言...

    JAVA调用zpl条码打印机打印实现中文打印。

    本文将深入探讨如何使用Java编程语言来调用ZPL(Zebra Programming Language)条码打印机,实现中文打印以及网络打印的功能。 ZPL是Zebra公司为它的条码打印机设计的一种编程语言,用于创建和控制打印任务。ZPL主要...

    zebra条码打印函数调用说明

    Zebra作为一家知名的条码打印机制造商,提供了丰富的API和编程接口供开发者调用,以便在各种应用程序中集成条码打印功能。本文将深入探讨Zebra条码打印函数的调用方法,包括一维和二维条码的生成。 一、EPL2语言...

    C#调用zpl条码打印机打印中文打印及网络打印实例

    在IT行业中,尤其是在软件开发领域,常常需要与硬件设备进行交互,例如条码打印机。本实例将探讨如何使用C#编程语言调用ZPL(Zebra Programming Language)指令来实现中文打印以及网络打印功能,这对于物流、仓储、...

    SAP中如何通过SMARTFORM 在ZEBRA 打印机打印条码

    SAP中如何通过SMARTFORM 在ZEBRA 打印机打印条码

    Zebra Barcode 条码中文打印例子

    在本文中,我们将深入探讨如何使用Zebra Barcode技术来实现中文条码的打印。Zebra是一家知名的条码打印机制造商,其产品广泛应用于零售、物流、医疗等众多领域。在中文环境下的条码打印可能会遇到一些挑战,但通过...

    Zebra斑马条码打印机驱动

    在使用Zebra斑马条码打印机驱动时,用户可以享受到以下功能: 1. **兼容性**:该驱动程序通常兼容多种操作系统,如Windows XP到Windows 10,确保在不同环境下都能正常工作。 2. **设置与配置**:用户可以通过驱动...

    ZEBRA iIII条码打印机使用培训

    ZEBRA公司成立于1969年,是一家专业开发和生产热转印条码标签打印设备的企业。公司产品以稳定性能和高品质的打印质量在业界享有盛誉。ZEBRA公司采用Element Energy Equalizer(E3)专利技术,这一技术保证了打印机...

    zebra条码打印VC示例

    本文将深入探讨如何使用Visual C++(VC)来实现与Zebra条码打印机的交互,以"zebra条码打印VC示例"为题,我们将解析这一过程的关键知识点。 首先,我们要理解ZPL(Zebra Programming Language),它是Zebra打印机的...

    delphi 条码打印机

    在Delphi中,可以通过串行端口(RS-232)、USB、网络(TCP/IP)等方式连接ELP条码打印机。需要使用到`TSerialPort`组件或自定义网络通信类来建立通信通道。确保正确设置波特率、数据位、停止位和校验位,以便与...

    J2EEweb调用本地斑马条码打印机打印条码

    标题所指的“J2EE web调用本地斑马条码打印机打印条码”,实质上是探讨如何在Java Web应用程序中集成条形码打印功能,具体而言,是在Web应用中实现对本地斑马(Zebra)条码打印机的直接调用,以打印条形码。...

    Zebra打印实例Delphi

    本篇文章将深入探讨如何在Delphi中实现Zebra打印机的条形码打印实例。 首先,理解Zebra打印机的工作原理至关重要。Zebra打印机通过使用特定的ZPL(Zebra Programming Language)或EPL(Eltron Programming Language...

    JAVA调用zpl条码打印机打印中文打印及网络打印实例

    在IT行业中,尤其是在自动化和物联网领域,条码打印机和相关的编程接口是不可或缺的一部分。本实例主要探讨的是如何使用JAVA语言来调用ZPL(Zebra Programming Language)指令,实现中文字符的打印以及网络打印功能...

    C#写的控制TEC条码打印机的源码_一行打印一个

    在这个项目中,TEC条码打印机通过并行端口(LPT1)与计算机相连。并口是早期打印机常见的接口,它允许直接与硬件进行低级别的通信。在Windows系统中,我们需要添加一个“Generic / Text Only”打印机驱动,这是一个...

Global site tag (gtag.js) - Google Analytics