Win打印之页边距.doc_第1页
Win打印之页边距.doc_第2页
Win打印之页边距.doc_第3页
Win打印之页边距.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.启用页边距:默认情况下PrintDocument是不理会页边距的(MS再次让人无语。),这也是为什么有人说明明设了页边距在打印预览里却没有效果的原因。解决办法是设置PrintDocument对象的OriginAtMargins属性为True,如下:printDocument1.OriginAtMargins = true; /启用页边距再来看一下从元数据中提取的关于OriginAtMargins属性的定义: / 摘要:/ 获取或设置一个值,该值指示与页关联的图形对象的位置是位于用户指定边距内,还是位于该页可打印区域的左上角。/ 返回结果:/ 如果图形起始于页面边距,则为 true;如果图形原点位于该页可打印区域的左上角,则为 false。默认为 false。DefaultValue(false)public bool OriginAtMargins get; set; 可以看到此属性的DefaultValue为false,所以如果不改的话,页边距设的再大也没有用。 2.PageSetupDialog中页边距的正常显示这个问题一度搞得我有点儿心烦每打开一次“页面设置”对话框,哪怕你不做任何更改就点“确定”关闭它,当你再打开它时你会发现,上面显示的页边距“神奇地”变小了。举个具体的例子来说,如果你没有编程预设置页边距的话,默认第一次打开“页面设置”时的页边距应该是10mm,当你点“确定”关闭它再打开后,页边距变成了3.9mm,再重复这一操作,页边距又变成了1.5mm,依此类推。之所以会出现不正常的现象,都是因为制式转换导致的.NET对于页边距是绝对的“大国沙文主义”,只认美制的“英寸”不认别的制式,其默认单位是“0.01英寸”。而我们的OS就比较入乡随俗,知道用“毫米”。所以在PageSetupDialog窗体上中显示的单位是“毫米”(取决于OS)。由于两边制式不一样,搭不上话,.NET就会强制的把OS的制式单位给转换成它“习惯”的“英寸”。 也就是说:在你点击“页面设置”对话框的“确定”按钮后,.NET会自动进行“毫米-英寸”的隐式转换。本来这也没什么大不了,问题出现在:再度打开PageSetupDialog对话框时,PageSetupDialog对象却并没有进行与上面的隐式转换对应的“英寸-毫米”逆向转换,而仅仅是简单粗暴地将单位名改了,从“Display”(0.01英寸)改成了“TenthsOfAMillimeter”(0.1毫米),数值却动都没动一下。也就是说不管你给PageSetupDialog什么值,它都认为是以0.1毫米为单位的数。看下面流程就明白了:显示10(mm)-0.3937(in)-39.97(0.01in)-因为Margin尺寸只接受int型,so-39(0.01in) -错误转换,只改单位-39(0.1mm)-显示3.9(mm) 问题是清楚了,怎么解决呢? 第一个办法(不是办法的办法):更改OS度量衡设置操作系统是根据安装时选择的地区来确定不同的默认度量衡制式。我国用的度量衡系统是“公制”(米/厘米/毫米),而MS所在的美国用的是“美制”(英尺/英寸)。在XP系统下,可以通过“控制面板”-“区域和语言选项”-“区域选项”-“标准和格式”-“自定义”-“数字”-“度量衡系统”来设置当前的度量衡制式。把度量衡系统由“公制”改成“美国”,再去试验一切OK,只不过页边距后面括号里的单位描述变成了“英寸”。OK的原因很简单,不需要转换了嘛。 第二个办法:编写代码将英寸正确的转换到毫米我们可以利用.NET提供的PrinterUnitConvert类的Convert方法来实现这个目标,代码如下:private void btnPageSetup_Click(object sender, EventArgs e) PageSetupDialog psd = new PageSetupDialog(); psd.Document = printDocument1; Margins mg = printDocument1.DefaultPageSettings.Margins; /保存原始Margins psd.PageSettings.Margins = PrinterUnitConvert.Convert(mg, PrinterUnit.Display, PrinterUnit.TenthsOfAMillimeter); if (psd.ShowDialog() = DialogResult.Cancel) /psd.PageSettings.Margins改变导致printDocument1.DefaultPageSettings.Margins也随之改变, /所以为了避免点了Cancel后,下一次打开对话框时mg被错误地赋给了已经改变了的printDocument1.DefaultPageSettings.Margins值, /需要将printDocument1.DefaultPageSettings.Margins还原。 printDocument1.DefaultPageSettings.Margins = mg; Convert方法的第三个参数必须为PrintUnit枚举中的TenthsOfAMillimeter(0.1毫米),只有这样才能与“错误转换”后的单位一致从而显示出正确的值。如果上面把第三个参数换成PrinterUnit.HundredthsOfAMillimeter(0.01毫米),得到的数字要比0.1毫米的大10倍,而PageSetupDialog不管你得到的数字是多少,都会认为它是0.1毫米单位的,所以显示出的页边距就会大10倍从而出错。 第三个办法:利用.NET 2.0新增的属性.Net 2.0中,PageSetupDialog对象新增加了一个EnableMetric属性,MSDN中的描述是:“获取或设置一个值,该值指示以毫米为单位显示边距设置时,是否自动将边距设置转换为以百分之一英寸为单位(或相反)。 PageSettings 类以百分之一英寸为单位测量 PageSettings.Margins,但 PageSetupDialog 允许用户以英寸或毫米为单位设置边距,具体取决于运行该应用程序的系统的区域设置。在 .NET Framework 2.0 版中,如果您的应用程序可能会在以毫米为单位测量文档边距的区域中使用,则应将此属性设置为 true。如果要自己执行转换(像 .NET Framework 2.0 版之前的版本所要求的那样),则应使用默认值 false。”此法最简单,只要设置EnableMetric为True即可。代码如下:private void btnPageSetup_Click(obje

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论