You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:43:20