一行可以包含多少个字符?(C#打印文本)

时间:2012-02-16 19:44:50

标签: c# printing textbox system.printing

好的,所以我想要打印一个文本框的文本,但是我有一个问题,当我有一个太大的行离开页面时我怎么能知道一行可以包含多少个字符,请记住大小和字体的变化。

我已经拥有了从网络上获取的代码,所以你知道我想要什么。

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 个答案:

答案 0 :(得分:2)

您应该阅读FontMetrics

了解如何获取字体指标后,您可以将其与绘图区域结合使用,以确定可以放置的字符数。

编辑: 您可以按如下方式获取绘画区域的大小:

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

获得页面宽度后,您可以从字体中获取字体指标,然后将页面宽度除以字体的宽度。请发言,这就是你可以在页面上横向放置多少个字符。确保使用相同的单位(宽度为默认像素)。如果需要,你可以为垂直做同样的事情。

答案 1 :(得分:0)

我使用的代码可能对您有帮助。

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;
}