一尘不染

Word将字符串多行换行

c#

凌晨1点尝试将字符串自动换行。每行将具有定义的宽度。

例如,如果1 1将得到此结果字,则将其包装到宽度为120像素的区域;

Lorem ipsum dolor坐下来,
一直保持良好的状态。桑达augue
velit,vulputate坐阿梅德tempor没有,
有人说生活压力。在
那层沙拉前面。直到
枕头,除非他或箭头阿梅德,
SEM奥奇luctus velit,SED elementum
ligula赌注,既不是,也不是。营养
居民足球伤心欲绝,
netus et al su丑陋的饥饿和
贫困。即使在那儿,孩子们也
需要开发人员事先想要的东西。
没有生命,无礼的天鹅绒。
Vivamus lorem 中的Proin。明天化妆师会
向作者或山谷发消息。
带有箭头的Dui家庭作业乌骨颤抖
开设赌场。为此,您可能
不会牺牲,也不会牺牲亨德利特。
现在的Maecenas湖。没有
热身足球禅。没有
怀孕制造仇恨或
任何酱方便。每次
照顾坐,赌场不是
免费的纸箱足球。足球博彩
丑陋,开发者临床。
聊天营养锅不笑
本科生抗氧化剂。停泊,或
分层切片。甚至连毛里斯(Mauris)骚动性的先天性
前庭带动的Preiium dioo也是如此。


阅读 871

收藏
2020-05-19

共1个答案

一尘不染

static void Main(string[] args)
{
    List<string> lines = WrapText("Add some text", 300, "Calibri", 11);

    foreach (var item in lines)
    {
        Console.WriteLine(item);
    }

    Console.ReadLine();
}

static List<string> WrapText(string text, double pixels, string fontFamily, 
    float emSize)
{
    string[] originalLines = text.Split(new string[] { " " }, 
        StringSplitOptions.None);

    List<string> wrappedLines = new List<string>();

    StringBuilder actualLine = new StringBuilder();
    double actualWidth = 0;

    foreach (var item in originalLines)
    {
        FormattedText formatted = new FormattedText(item, 
            CultureInfo.CurrentCulture, 
            System.Windows.FlowDirection.LeftToRight,
            new Typeface(fontFamily), emSize, Brushes.Black);

        actualLine.Append(item + " ");
        actualWidth += formatted.Width;

        if (actualWidth > pixels)
        {
            wrappedLines.Add(actualLine.ToString());
            actualLine.Clear();
            actualWidth = 0;
        }
    }

    if(actualLine.Length > 0)
        wrappedLines.Add(actualLine.ToString());

    return wrappedLines;
}

添加WindowsBasePresentationCore库。

2020-05-19