как исправить ширину строки для печати документа печати С#

Я печатаю серию строк через объект документа печати в С#, и он работает нормально. каждая строка по умолчанию печатается с новой строки. но если строка содержит больше символов, чем может напечатать строка, то оставшиеся символы обрезаются и не появляются в следующей строке. Может ли кто-нибудь сказать мне, как я могу исправить количество символов в строке и напечатать превышение символов в новой строке?

Спасибо


person Muhammad Gulfam    schedule 24.02.2017    source источник
comment
У меня вопрос, как сделать так, чтобы он не сворачивался? Какой у тебя код?   -  person Demodave    schedule 28.08.2018


Ответы (2)


Чтобы ваш текст переносился в конце каждой строки, вам нужно вызвать перегрузку DrawString, которая принимает объект Rectangle. Текст будет завернут внутрь этого прямоугольника:

private void pd_PrintPage(object sender, PrintPageEventArgs e)
{
    //This is a very long string that should wrap when printing
    var s = new string('a', 2048);

    //define a rectangle for the text
    var r = new Rectangle(50, 50, 500, 500);

    //draw the text into the rectangle.  The text will
    //wrap when it reaches the edge of the rectangle
    e.Graphics.DrawString(s, Me.Font, Brushes.Black, r);

    e.HasMorePages = false;
}
person Chris Dunaway    schedule 24.02.2017

Это может быть не лучшая практика, но один из вариантов — разбить массив, а затем добавить его в строку строки в зависимости от того, будет ли строка по-прежнему меньше ограничения длины строки. Имейте в виду, что вам придется учитывать ширину букв, если вы не используете моноширинный текст.

Пример:

String sentence = "Hello my name is Bob, and I'm testing the line length in this program.";
String[] words = sentence.Split();

//Assigning first word here to avoid begining with a space.
String line = words[0];

            //Starting at 1, as 0 has already been assigned
            for (int i = 1; i < words.Length; i++ )
            {
                //Test for line length here
                if ((line + words[i]).Length < 10)
                {
                    line = line + " " + words[i];
                }
                else
                {
                    Console.WriteLine(line);
                    line = words[i];
                }
            }

            Console.WriteLine(line);
person Jeremy    schedule 24.02.2017