转自:http://blog.csdn.net/yourredsun/archive/2008/01/11/2037330.aspx
页面长宽属性:
PrintPageEventArgs.PageBounds 属性 表示页面全部区域的矩形区域。
PrintPageEventArgs.MarginBounds 属性 以百分之一英寸为单位的矩形区域,表示边距以内的页面部分。
测量字符串的方法:
PrintPageEventArgs.Graphics.MeasureString 方法 (String, Font)
于是我用下面的方法使字符串居中显示:
private void prtDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Font strFont = new Font("Arial", 32);
string s = "这是第1页";
e.Graphics.DrawString(s, strFont, Brushes.Green,
(float)e.PageBounds.Width / 2 - e.Graphics.MeasureString(s, strFont).Width / 2,
(float)e.PageBounds.Height / 2 - e.Graphics.MeasureString(s, strFont).Height / 2);
}
试验结果显示左右是居中的,上下差了3毫米,百思不得其解,
后使用中断大法,运行到此句,发现:
//在new Font("Arial", 32) 字体下
//e.Graphics.MeasureString(s, strFont).Height=56.66
无意中发现:
//strFont.Height=50
这是为什么?后据此查msdn得到:
//new Font("Arial", 32) 字体下
//e.Graphics.MeasureString(s, strFont).Height=56.66 SizeF 相当于SizeF.Height 通常为矩形的宽度和高度,
// 也就是返回一个矩形的覆盖区域
//strFont.Height=50 int 此字体的行距(以像素为单位)。
//行距是两个连续文本行的基线之间的垂直距离。因此,行距包括行间的空白空间及字符本身的高度。详情查阅:Font.Height 属性
//结论:字符的默认覆盖区域的高度比行距还大
//注意:上面获得的宽度也是有细微差别的,准确地要使用格式信息,详情查阅:Graphics.MeasureString 方法 (String, Font)