【问题标题】:Add a line break after 4 words in a String in C#在 C# 中的字符串中的 4 个单词后添加换行符
【发布时间】:2019-03-28 02:04:02
【问题描述】:

我尝试使用 PrintDocuments 控件制作客户收据,现在我想在客户收据上显示页脚。存储在字符串类型变量中的页脚文本: String Footertex="ABC DEF GHIJK LMNOP QRSTUVWXYZ AAA BBBBBBB ABCD"; 但我使用热敏打印机打印客户收据,并且页脚中仅打印以下文本:

ABC DEF GHIJK LMNOP

现在我希望它自动换行并将剩余的文本显示在下一行,如下所示:

ABC DEF GHIJK LMNOP
QRSTUVWXYZ AAA 
BBBBBBB ABCD

我只是希望如果文本的字符数大于 19,它会换行并在下一行打印剩余的文本。 提前致谢。

string item = (_List[i].Qty + " x " + _List[i].Name);
int nInterval1 = 18;
string res1 = String.Concat(item.Select((c, j) => i > 0 && (i % nInterval1) == 0 ? c.ToString() + Environment.NewLine : c.ToString()));

我试过上面的代码,但它会在 18 个字符后断行,但在某些情况下,在 18 个字符后断行是没有意义的,因为它会破坏任何单词。我想在一个完整的单词后换行。

【问题讨论】:

  • 如果热敏打印机可以打印html文档,您应该可以使用带有包装功能的html模板。

标签: c# winforms


【解决方案1】:

您可以使用以下代码(使用我的 cmets)来做到这一点:

var item = "Hide Copy Code QRSTUVWXYZ AAA BBBBBBB ABCD";
const int interval = 18;
var words = item.Split();
var result = "";
var symbolsInCurrentLine = 0;
foreach (var word in words)
{
    if (word.Length + symbolsInCurrentLine > interval)  // after adding word line will be longer than required
    {
        result += "\n";
        symbolsInCurrentLine = 0;
    }
    else
    {
        if (symbolsInCurrentLine > 0)  // add space after previous word if needed
        {
            result += " ";
            symbolsInCurrentLine++;
        }
        result += word;  // append word
        symbolsInCurrentLine += word.Length;
    }
}

【讨论】:

  • 当我在消息框中显示结果的值时,您的技术是有效的。它打破了界限。但现在我想使用打印文档在客户收据中打印刹车线,就像这样“graphics.DrawString(result, myfont, Brushes.Black, 10, startY = startY + 20);”但它只显示前 18 个字忽略 18 个单词之后的单词,请帮助我如何解决它。
  • 你有空间打印其他单词吗?
  • 酷!如果有帮助,请接受这个答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 2021-05-25
相关资源
最近更新 更多