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)