非汉字系统下汉字的打印输出_第1页
非汉字系统下汉字的打印输出_第2页
非汉字系统下汉字的打印输出_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要介绍了在无汉字字库的打印机上,无需启动汉字操作系统打印汉字的方法,并给出了非汉字系统下打印输出含有汉字的文本文件的实用VC+源程序。 关键词汉字打印,Zebra系列, VC+语言,24*24点阵字库,文本文件 电脑用户中,有相当一部分用户的打印机不带汉字库,他们打印输出汉字的一般方法是,首先启动汉字操作系统,使汉字打印驱动程序驻留内存,再把含有汉字的文本文件送打印机输出,或特定格式的汉字文件经应用程序打印输出;这对于只是单一打印汉字文件,还是比较简单实用的,但有时在我们自编的应用程序中,只是要打印汉字,而不需要屏幕显示或键盘输入汉字,在汉字系统下运行应用程序时,会带来一些副作用,如汉字系统

2、占用内存资源、使显示速度变慢等。若在西文状态下,使不带汉字库的打印机也能打印输出汉字,即可避免因启动汉字系统运行应用程序而带来的麻烦。 笔者针对上述问题,经过分析研究Zebra打印机命令码,通过VC+语言编程,用矩阵转置的方法实现了西文状态下汉字的打印。 一、非汉字系统下汉字打印实现原理 以目前拥有工业用户较多的Zebra系列打印机为例,说明汉字打印实现原理,汉字打印的字摸数据来源于UCDOS的24*24点阵字库。 打印机为用户提供了自定义字符功能,标准字符存在打印机的ROM中,而用户自定义字符则存在打印机的RAM中或直接对内存进行操作。同时为了避免因文本文件中出现重复汉字或图形符号造成频繁读

3、取字库而影响文本输出速度,我们直接对内存进行操作。对图像而言,由于占用内存较大,影响运行速度,所以放在RAM中。 把汉字库字模点阵数据作为自定义字符的数据,在打印机的内存中生成自定义字符,再输出内存中的自定义字符,即可在打印机上打印汉字。 打印机自定义下载字符命令为: DGd,t,w,data其中DG为设置打印机为下载图形模式; d为储存图形的目标设备(内存地址); t为图像总的字节数; w为每行字节数; data为ASSII为十六进制串图像定义。因2424点阵打印一个字需要243=72个字节,所以在这里 t=72,w=3。 选择打印字符集命令为: XGd,t,w其中XG 为打印字符集命令;

4、d为储存图形的目标设备(内存地址); t为图像总的字节数; w为每行字节数。 由于24*24点阵打印字库字模数据的存贮序列是按列优先的顺序,每列的24点用连续的3个字节存储,其顺序是按字模的上中下排列,且每个字节的最高位在上、最低位在下;而Zebra系列打印机打印输出序列是按行优先的顺序打印的,因此字模数据的存贮序列矩阵需行列转置变换后才可送打印机打印。 二、汉字文本文件的打印 利用上述原理,可以在自己应用程序中,实现在非汉字系统下,不带汉字库的打印机上(或带汉字库的打印机设置为英文方式)输出汉字。 作为应用,用VC+语言编制一打印含有汉字的文本文件的程序。 编程思路如下:置打印机为信函打印质

5、量方式及每英寸10个字符,以使输出一个汉字和图形符号占两个字符位置,处理文本文件中的字串,当字串中遇到汉字时(连续两个字符的第一个字符 ASCII 码大于 175 且第二个字符ASCII码大于 160),读取UCDOS的24*24点阵汉字库HZK24S(宋体)或HZK24F(仿宋体) 或 HZK24K(楷体)或HZK24H(黑体)中该汉字对应的点阵数据,当字串中遇到图形符号时(连续两个字符ASCII码的第一个字符ASCII 码大于 160 小于176且第二个字符ASCII码大于 160),读取UCDOS的 24* 24 点阵图形符号库HZK24T中该图形符号对应的点阵数据,用文本方式或图形方式

6、输出该汉字或图形符号,否则输出原字符。 根据以上理解,得出如下读取汉字字模的算法: 如前面所述,汉字以字模的形式储存于字库中,每个汉字在字库中有唯一的区位码与之对应,根据某一汉字的机内码可以确定其区位码及其在字库中的起始位置,就可以从字库中取出汉字字模。具体步骤如下: (1)根据机内码计算汉字的区位码 区码=机内码高字节-A1H 位码=机内码底字节-A1H (2)根据区位码计算汉字在字库中的偏移量 汉字在字库中的偏移量L=(区码-m)*94+位码)*n 其中,m位汉字在字库中的起始号,n为每个汉字所占的字节数。字库中:偏移量=(区码-m)*94+位码)*(字库的点阵数2/8) /*因为一个汉字

7、的每一个点是作为一个位 (bit)处理的,又8位为一个字节*/ 三、打印汉字文本文件VC+源程序 打印含有汉字的文本文件源程序的主要函数源代码如下所示: /* /功能: 将要打印的部分汉字字库装入打印机内存中 /输入参数: sHz 当前需要初始化的汉字字串 /输出参数: HZtobyte 汉字点阵字节流/* #define FONTK_NAME c:Cclibhzk24k/标准24点阵楷体汉字字库 #define FONTT_NAME c:Cclibhzk24t/标准24点阵汉字索引库 void CHesnprinterDlg:MakeHZHEX(CString &sHZ,CString &HZtobyte) CFile theFile,theFile_t; CStringcsFileName=FONTK_NAME,csFileName_t=FONTT_NAME; BOOL bOpenOK,bOpenOK_t; HZtobyte=;/ Open the file without the Cre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论