wince6.0 设备 打印定长字符串问题

ysjydss 2013-06-22 06:24:13
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());//可是打印后,并不是一样的长,造成小票对不齐,非常难看。
}

哪位大神指点指点吧。。。。。
...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysjydss 2013-06-26
  • 打赏
  • 举报
回复
结贴 tcmakebest 和 jqncc说的对,是字体的原因,宋体不是等宽字体,新宋和仿宋是等宽字体,在wince6.0中,增加新宋或者仿宋,用新宋或者仿宋字体打印就对齐了。
ysjydss 2013-06-24
  • 打赏
  • 举报
回复
我试了一下( 找个label,设置字体,然后mssagebox.show(font.name) ),wince6.0默认只有两个字体,一个tahoma,一个是宋体,设置成其他字体比如黑体,新宋,全部显示成“宋体”,这可咋整,在说宋体也是等宽字体吧,
tcmakebest 2013-06-24
  • 打赏
  • 举报
回复
pr.PrintLine 是个什么方法,如果只是发送字符串就可以打印了,那得找找打印机有没有相关字体的设置。
jqncc 2013-06-23
  • 打赏
  • 举报
回复
一,使用等宽字体,新宋体才是等宽字体 二,如果允许超长就换行,可以在矩形内画然后自动换行
ysjydss 2013-06-22
  • 打赏
  • 举报
回复
自己顶一下。。。。。。。。。。。。。。。
ysjydss 2013-06-22
  • 打赏
  • 举报
回复
字体默认就是宋体,我改成其他字体也是这样
tcmakebest 2013-06-22
  • 打赏
  • 举报
回复
打印内容的长短与编码方式无关,得改字体和字号啊,换等宽字体吧,比如“宋体”
ysjydss 2013-06-22
  • 打赏
  • 举报
回复
补充一下,这行改成gb2312也不好使,效果一样 string spmctxt = spmc + new string(' ', 16 - Encoding.GetEncoding("Unicode").GetBytes(spmc).Length);

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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