日期:2014-05-17  浏览次数:21000 次

wince6.0 设备 打印定长字符串问题
本帖最后由 ysjydss 于 2013-06-22 18:31:53 编辑
pda 售货时,打印售货小票,其中商品名称有汉字,有英文,字符长度有长有短,所以定长打印8个汉字,16个长度,不足补空格,问题来了
 foreach (DataRow row in dt.Rows)
{
   string spmc = row["商品名称"].ToString();
   string spmctxt = spmc + new string(' ', 16 - Encoding.GetEncoding("gb2312").GetBytes(spmc).Length);
    MessageBox.Show(spmctxt.Length.ToString());//这里是不管汉字还是英文,都算一个字符长度,所以字符长度有长有短。
    MessageBox.Show(Encoding.GetEncoding("gb2312").GetBytes(spmctxt).Length.ToString());//这里显示定长16个长度
string spdj = row["单价"].ToString();
decimal sl = Convert.ToDecimal(row["数量"].ToString());
decimal je = Convert.ToDecimal(row["金额"].ToString());
pr.PrintLine(spmctxt + spdj.PadRight(4) + sl.ToString().PadRight(6) + je.ToString());//可是打印后,并不是一样的长,造成小票对不齐,非常难看。
}

哪位大神指点指点吧。。。。。
WinCE Unicode String

------解决方案--------------------
打印内容的长短与编码方式无关,得改字体和字号啊,换等宽字体吧,比如“宋体”
------解决方案--------------------
一,使用等宽字体,新宋体才是等宽字体
二,如果允许超长就换行,可以在矩形内画然后自动换行
------解决方案--------------------
pr.PrintLine 是个什么方法,如果只是发送字符串就可以打印了,那得找找打印机有没有相关字体的设置。