C#打印时获得字符串的正确像素高度,可使字符居中及精确定位

转载 2008年10月30日 21:14:00
页面长宽属性:
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)

C#打印时获得字符串的正确像素高度,可使字符居中及精确定位

页面长宽属性:PrintPageEventArgs.PageBounds 属性   表示页面全部区域的矩形区域。PrintPageEventArgs.MarginBounds 属性 以百分之一英寸为单...
  • chybaby
  • chybaby
  • 2008年10月30日 21:14
  • 3052

利用.NET进行预览和打印

从开发角度来看,Microsoft.NET 已经改变了几乎所有的方方面面。其中的一些变化(例如,Web 窗体和 ADO.NET)已经要求在完成任务的方式上进行重大改变,而其他一些变化在本质上则更为缓和...
  • bo310
  • bo310
  • 2008年07月21日 08:42
  • 2933

C#打印时获得字符串的正确像素宽度高度

转自:http://blog.csdn.net/yourredsun/archive/2008/01/11/2037330.aspx 页面长宽属性:PrintPageEventArgs.PageBou...
  • ljgsyf
  • ljgsyf
  • 2011年06月04日 17:25
  • 697

C# 字符串换行、字符串像素高度、宽度 的结构

//字符串高度、宽,行数,及字符串本身 public struct hhString { public string str; //处理后的字符串 public int hSn...
  • gui597651737
  • gui597651737
  • 2012年10月13日 15:36
  • 3768

PageSetupDialog 控件页边距bug的完整解决

打印设置对话框点击确定页边距不断变化的问题,网上找到了一部分解决办法,都是只解决了打印设置对话框点击确定页边距不断变化的问题,没有解决初次打开对话框的数据准确问题、没有考虑和打印预览、真实打印设置数据...
  • u013593744
  • u013593744
  • 2016年02月27日 14:24
  • 811

如何使用 PageSettings 对象和 PageSetupDialog 控件允许用户选择各种打印选项

//------------------------------------------------------------------------------/// ///    版权所有 (c) ...
  • abaowu
  • abaowu
  • 2004年09月15日 13:58
  • 2241

MFC--获取字符串的像素尺寸

CDC* pDC = GetDC(); CSize size = pDC->GetTextExtent(_T("GG"));//size.cx 为字符串所占水平方向的像素数 ...
  • SealedGhost
  • SealedGhost
  • 2017年02月17日 11:22
  • 343

获取字符串所占像素长度

在图生上处理字符的时候,需要得到字符串所占位置长度。这长度与字体相关。下面的方法判断200像素的长度内是否可以以最小字体为15号字体来显示字符串。str为你要显示的字符串。 UIFont *font ...
  • favormm
  • favormm
  • 2011年01月25日 18:26
  • 5581

利用.NET进行预览和打印

从开发角度来看,Microsoft.NET 已经改变了几乎所有的方方面面。其中的一些变化(例如,Web 窗体和 ADO.NET)已经要求在完成任务的方式上进行重大改变,而其他一些变化在本质上则更为缓和...
  • zsyzsj
  • zsyzsj
  • 2007年05月22日 15:16
  • 8521

掌握.NET中的日常打印

by Michael Eaton  技术工具箱:C# (百度N久,终于找到了,大多是残篇,费了大功夫,汇集起来,最后一个图仍然没找到)         你可以用几种方法在.NET中编程来生成...
  • dzweather
  • dzweather
  • 2013年08月22日 12:04
  • 9682
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#打印时获得字符串的正确像素高度,可使字符居中及精确定位
举报原因:
原因补充:

(最多只允许输入30个字)