C# WinForms中PrintDocument的StringTrimming.EllipsisWord未正常截断文本
解决PrintDocument中DrawString文本不截断的问题
问题根源
你设置了StringTrimming.EllipsisWord但未生效的核心原因是:默认StringFormat允许文本自动换行,过长的文本会换到矩形内的下一行,而非触发单行截断逻辑,最终导致文本超出矩形边界显示。
修复方案
修改StringFormat的FormatFlags,添加StringFormatFlags.NoWrap强制文本单行显示,这样文本超出矩形宽度时就会自动截断并显示省略号:
StringFormat fmtNearTrimmed = new StringFormat(); fmtNearTrimmed.Alignment = StringAlignment.Near; fmtNearTrimmed.LineAlignment = StringAlignment.Center; fmtNearTrimmed.Trimming = StringTrimming.EllipsisWord; // 关键:禁止文本换行,强制单行触发截断 fmtNearTrimmed.FormatFlags |= StringFormatFlags.NoWrap;
额外检查项
- 确认
RectangleF的宽度(550)是你预期的文本最大显示宽度,无计算或布局重叠错误; - 确保
defaultFont.Height + 4的矩形高度足够容纳单行文本,避免因高度不足导致的意外裁剪; - 建议使用
using语句包裹StringFormat,用完自动释放资源:using (StringFormat fmtNearTrimmed = new StringFormat()) { fmtNearTrimmed.Alignment = StringAlignment.Near; fmtNearTrimmed.LineAlignment = StringAlignment.Center; fmtNearTrimmed.Trimming = StringTrimming.EllipsisWord; fmtNearTrimmed.FormatFlags |= StringFormatFlags.NoWrap; // 执行DrawString操作 rc = new RectangleF(200, curPos, 550, defaultFont.Height + 4); e.Graphics.DrawString(list[curItem].ProductName, defaultFont, Brushes.Black, rc, fmtNearTrimmed); }
内容的提问来源于stack exchange,提问作者TC_Guy
相关产品推荐
相关产品推荐

