Сколько символов может содержать одна строка? (C # печать текста) - PullRequest
1 голос
/ 16 февраля 2012

Хорошо, поэтому я хочу напечатать текст текстового поля, но у меня есть одна проблема, когда у меня слишком большая строка, она выходит за пределы страницы. Как узнать, сколько символов в строке может содержаться в границах помните, что размер и шрифт меняются.

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

private void document_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            float linesPerPage = 0;
            float yPosition = 0;
            int count = 0;
            float leftMargin = e.MarginBounds.Left;
            float topMargin = e.MarginBounds.Top;
            string line = null;

            Font printFont = txtMain.Font;
            SolidBrush myBrush = new SolidBrush(Color.Black);
            // Work out the number of lines per page, using the MarginBounds.
            linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);
            // Iterate over the string using the StringReader, printing each line.
            while (count < linesPerPage && ((line = myReader.ReadLine()) != null))
            {
                // calculate the next line position based on the height of the font according to the printing device
                yPosition = topMargin + (count * printFont.GetHeight(e.Graphics));
                // draw the next line in the rich edit control
                e.Graphics.DrawString(line, printFont, myBrush, leftMargin, yPosition, new StringFormat());
                count++;
            }
            // If there are more lines, print another page.
            if (line != null)
                e.HasMorePages = true;
            else
                e.HasMorePages = false;
            myBrush.Dispose();
        }

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Вы должны прочитать о FontMetrics

Когда вы знаете, как получить метрику шрифта, вы можете использовать ее в сочетании с областью рисования, чтобы решить, сколько символов вы можете разместить.

РЕДАКТИРОВАТЬ: Вы можете получить размер области рисования следующим образом:

//This gives you a rectangle object with a length and width.
Rectangle bounds = e.MarginBounds;

Получив ширину страницы, вы получите метрику шрифта из своего шрифта, а затем разделите страницуширина по ширине шрифта.Возьмите слово, и вот сколько символов вы можете поместить горизонтально на странице.Убедитесь, что вы используете те же единицы (ширина по умолчанию пикселей).При необходимости вы можете сделать то же самое для вертикали.

0 голосов
/ 11 ноября 2014

Я использую этот код, который может вам помочь.

private string txt(string yourtext)
{
    string[] text = new string[200];

    text = yourtext.ToLower().Split(' ');
    string b = "";
    int i = 1;

    foreach (string s in text)
    {
        if (b.Length < i * 100)
            b += s + " ";
        else
        {
            b += "\n";
            i++;
        }
    }

    return b;
}
...