网上搜半天都没有现成的源代码,而且aspjpeg的.Canvas.PrintTextEx对包含汉字的字符串换行功能完全无效,被迫写了本程序。该程序可对文本文件中的中文字符进行自动换行,主要解决了2个问题:1是不对汉字进行截断,不会造成汉字乱码;2是原来文本中的回车换行如何处理。时间仓促写得不好,高手莫笑。本程序的例子是在图片中试题的截断显示,点击这里。
程序设计依据:GB2312的每一个汉字由两个字节构成,其中每一个字节的范围都在0xA1-0xFE。使用方法:函数参数str是需要换行的字符串,len是自动换行的最大长度。
#define MAX_LINE_BUF 4096 char g_src[MAX_LINE_BUF],g_dst[MAX_LINE_BUF]; char * add_return(char * str, int len) { unsigned char * pu; char * s, *d; g_dst[0]=0; s=str;d=g_dst;memset(g_dst,0,MAX_LINE_BUF); for(int i=0;i<strlen(str);i++) { int j,return_now=0; for(j=0;j<len && *s!=0;) { if(*(s)=='\r') { s++;j++; continue; } else if(*(s)=='\n') { *d=*s;j++;s++;d++; return_now=1; continue; } *d=*s; pu=(unsigned char *)s; // 判断是否是汉字,是汉字则拷贝双字节 if(*pu>=0xA1 && *pu<=0xFE) { j++; s++;d++; *d=*s; } j++;s++;d++; } i+=j; if(!return_now) { *d='\n';d++; } } return g_dst; } |