问个关于点阵字体的问题 请达人来帮帮忙。。。。。。

ling81327 2008-04-16 08:55:12
请问如何打印出点阵字体,就是银行存折上的那种字体。无论用什么打印都可以,例如可以用WORD 也可以用FR 只要能打印出来就行 。。。。。。请帮帮忙,告知一下思路和解决办法
...全文
187 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhu_gx 2008-04-16
  • 打赏
  • 举报
回复
帮你顶一下
skylkj 2008-04-16
  • 打赏
  • 举报
回复
一样的.我们的英文和数字有专门的字库,是另外一个 xxx.bin文件.只是索引的时候简单一点,没那么多分区
ling81327 2008-04-16
  • 打赏
  • 举报
回复
我再问一下 如果是只打印英文字母和数字 是不是就不要这么麻烦了?
ling81327 2008-04-16
  • 打赏
  • 举报
回复
疯狂吐血中。。。。。我还以为下载了字库就OK了呢,我先研究研究先,谢谢LS
skylkj 2008-04-16
  • 打赏
  • 举报
回复
这个要看你用的字库的说明了

一般字库的bin文件是把字符按区划分后顺序存储.你根据所要打印的字符编码计算出偏移量,然后取出点阵数据.

这里是我们用的24点阵汉字字库的索引程序

FILE *fp;
long Addr=0;

fp=fopen("/lib/gt24.bin","rb");
if(fp==NULL)
{
printf_debug("Font not found.\n");
fclose(fp);
return -2;
}
if(Str[1]==0x7F)
{
printf_debug("No HZ Font.\n");
fclose(fp);
return -3;
}
if(Str[0]>=0xA1 && Str[0]<=0xAB && Str[1]>=0xA1)/*Section 1*/
Addr = (Str[0] - 0xA1)*94+(Str[1]-0xA1);
else if(Str[0]>=0xA8 && Str[0]<=0xA9 && Str[1]<0xA1)/*Section 5*/
{
if(Str[1]>0x7F) Addr=(Str[0]-0xA8)*96+(Str[1]-0x40)+845;
else Addr=(Str[0]-0xA8)*96+(Str[1]-0x40)+846;
}
if(Str[0]>=0xB0 && Str[0]<=0xF7 && Str[1]>=0xA1)/*Section 2*/
Addr=(Str[0]-0xB0)*94+(Str[1]-0xA1)+1038;
else if(Str[0]<0xA1 && Str[0]>=0x81)/*Section 3*/
{
if(Str[1]>0x7F) Addr=(Str[0]-0x81)*190+(Str[1]-0x40)+1038+6767;
else Addr=(Str[0]-0x81)*190+(Str[1]-0x40)+1038+6768;
}
else if(Str[0]>=0xAA && Str[1]<0xA1)/*Section 4*/
{
if(Str[1]>0x7F) Addr=(Str[0]-0xAA)*96+(Str[1]-0x40)+1038+12847;
else Addr=(Str[0]-0xAA)*96+(Str[1]-0x40)+1038+12848;
}
if(Str[1]>=0x30 && Str[1]<=0x39)/*Extended Section*/
{
if(Str[3]<0x30 || Str[3]>0x39)
{
printf_debug("No HZ Font.\n");
fclose(fp);
return -4;
}
Addr=(Str[2]-0x81)*12600+(Str[3]-0x39)*1260+(Str[0]-0xEE)*10+(Str[1]-0x39)+22046;
if(Addr<22046 || Addr>22046+6530)
{
printf_debug("No HZ Font.\n");
fclose(fp);
return -5;
}
}
Addr*=72;
fseek(fp,Addr,SEEK_SET);
fread(FontBuf,1,72,fp);
fclose(fp);
return 0;

大致上就是先通过字符编码来确定所属哪个汉字区,在通过字库说明里面的偏移计算公式计算出偏移Addr,然后读出之后的72字节数据就是该汉字的点阵数据,再根据字典数据的组织打印到屏幕或者打印机.

上面的代码仅仅只是参考,因为我们用的字库不一样
ling81327 2008-04-16
  • 打赏
  • 举报
回复
我又下载了一个Hzk14.bin,可还是不知道怎么用,郁闷。。。。。HELP , FIRE
ling81327 2008-04-16
  • 打赏
  • 举报
回复
谢谢LS提醒,我下载了一个HZK16字库,符合要求吗?请问怎么用呢?
skylkj 2008-04-16
  • 打赏
  • 举报
回复
银行存折打印机都是针打(针式打印机),你去找个针打用的点阵字库就行了
ling81327 2008-04-16
  • 打赏
  • 举报
回复
PS: 请大家不要乱灌水 水是没分的 谢谢
brightyang 2008-04-16
  • 打赏
  • 举报
回复
去下载一下这种字体...
skylkj 2008-04-16
  • 打赏
  • 举报
回复
http://hi.baidu.com/hrman/blog/item/4616bc2675ce13128a82a193.html
这里有你下的那个HZK16的使用说明

关键就是计算偏移量,然后就是操作文件读取.

delphi读取二进制文件可以用Tfilestream
ling81327 2008-04-16
  • 打赏
  • 举报
回复
skylkj GG 有没有DELPHI的程序啊 C++我看不懂

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧