请问如何打印出点阵字体,就是银行存折上的那种字体。无论用什么打印都可以,例如可以用WORD 也可以用FR 只要能打印出来就行 请帮帮忙,告知一下思路和解决办法 

解决方案 »

  1.   

    谢谢LS提醒,我下载了一个HZK16字库,符合要求吗?请问怎么用呢?
      

  2.   

    我又下载了一个Hzk14.bin,可还是不知道怎么用,郁闷。。HELP , FIRE
      

  3.   

    这个要看你用的字库的说明了一般字库的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字节数据就是该汉字的点阵数据,再根据字典数据的组织打印到屏幕或者打印机.上面的代码仅仅只是参考,因为我们用的字库不一样
      

  4.   

    疯狂吐血中。。我还以为下载了字库就OK了呢,我先研究研究先,谢谢LS
      

  5.   

    一样的.我们的英文和数字有专门的字库,是另外一个 xxx.bin文件.只是索引的时候简单一点,没那么多分区
      

  6.   

    skylkj GG 有没有DELPHI的程序啊  C++我看不懂
      

  7.   

    http://hi.baidu.com/hrman/blog/item/4616bc2675ce13128a82a193.html
    这里有你下的那个HZK16的使用说明关键就是计算偏移量,然后就是操作文件读取.delphi读取二进制文件可以用Tfilestream