DrawString的怪问题

niss 2012-01-06 11:22:41
我使用打印组件,drawstring一个字符串,是中文的,但是有点长,有19个汉字,问题是,明明我的rectanglef的宽度可以容下19个汉字的宽度(我直接画出了边框来比对的),可就是最后一个字会换行,我郁闷啊,换行后第一行右侧留下了大概两个汉字的宽度,怎么这么奇怪啊,把矩形再设宽点才行,可这样我估计是不是依然在右边留有空白,不能够塞满?我的只有数字的另一个矩形就可以塞满,奇怪啊
...全文
84 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xiacheng1984 2012-01-07
我上面的代码应该是可以消除这些默认自动添加的留白才对啊,得到的宽度应是每个字体宽度乘实际字符数。
会不会是字体本身的正常空白?
我上面的代码这样使用MeasureString是为了确保测量得到的数值和实绘一致,如果还有问题,应该可以以测量值进行计算后自行偏移或补偿
  • 打赏
  • 举报
回复
niss 2012-01-07
[Quote=引用 7 楼 xiacheng1984 的回复:]
我上面的代码应该是可以消除这些默认自动添加的留白才对啊,得到的宽度应是每个字体宽度乘实际字符数。
会不会是字体本身的正常空白?
我上面的代码这样使用MeasureString是为了确保测量得到的数值和实绘一致,如果还有问题,应该可以以测量值进行计算后自行偏移或补偿
[/Quote]
是的,可是不符合要求啊,我是要指定的矩形,不是通过测量得到的,不然就乱了,宽度不能限制了
  • 打赏
  • 举报
回复
xiacheng1984 2012-01-06
StringFormat stringFormat = new StringFormat(StringFormat.GenericTypographic);
stringFormat.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;
SizeF sizeF = g.MeasureString(str, font, maxwidth, stringFormat);
RectangleF rectF = new RectangleF(x, y, sizeF.Width, height);
e.Graphics.DrawString(str, font, brush, rectF, stringFormat);
  • 打赏
  • 举报
回复
孟子E章 2012-01-06
你可以试试 TextRenderer.DrawText()

FitBlackBox或者NoClip

http://msdn.microsoft.com/zh-cn/library/system.drawing.stringformatflags.aspx
  • 打赏
  • 举报
回复
niss 2012-01-06
[Quote=引用 1 楼 lmaohuanl 的回复:]
是不是其他什么干扰了
[/Quote]
我用的毫米为单位
然后所有的坐标和长宽以0.1mm为单位,建矩形时全部都是 xxx/10F 这个样子的长宽或坐标,建字体,建solidbrush,然后建一个stringformate,就可以drawstring了,没什么特别的啊
  • 打赏
  • 举报
回复
LMAOhuaNL 2012-01-06
是不是其他什么干扰了
  • 打赏
  • 举报
回复
niss 2012-01-06
使用StringFormat.GenericTypographic可以把留白缩小,但没法消除,很奇怪的是如果设置了水平居中,两边的留白就不会很明显,唉完全不明白怎么回事,可能windowsAPI也就是这个样子了
  • 打赏
  • 举报
回复
sugarbelle 2012-01-06
重新自己打19个汉字试试
  • 打赏
  • 举报
回复
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2012-01-06 11:22
社区公告

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