winform打印之页边距

winform打印之页边距

ID:11260961

大小:27.00 KB

页数:3页

时间:2018-07-11

winform打印之页边距_第1页
winform打印之页边距_第2页
winform打印之页边距_第3页
资源描述:

《winform打印之页边距》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.启用页边距:默认情况下PrintDocument是不理会页边距的(MS再次让人无语。。。),这也是为什么有人说明明设了页边距在打印预览里却没有效果的原因。解决办法是设置PrintDocument对象的OriginAtMargins属性为True,如下:printDocument1.OriginAtMargins=true;//启用页边距再来看一下从元数据中提取的关于OriginAtMargins属性的定义:////摘要://获取或设置一个值,该值指示与页关联的图形对象的位置是位于用户指定边距内,还是位

2、于该页可打印区域的左上角。////返回结果://如果图形起始于页面边距,则为true;如果图形原点位于该页可打印区域的左上角,则为false。默认为false。[DefaultValue(false)]publicboolOriginAtMargins{get;set;}可以看到此属性的DefaultValue为false,所以如果不改的话,页边距设的再大也没有用。2.PageSetupDialog中页边距的正常显示这个问题一度搞得我有点儿心烦——每打开一次“页面设置”对话框,哪怕你不做任何更改就点“确定

3、”关闭它,当你再打开它时你会发现,上面显示的页边距“神奇地”变小了。。。举个具体的例子来说,如果你没有编程预设置页边距的话,默认第一次打开“页面设置”时的页边距应该是10mm,当你点“确定”关闭它再打开后,页边距变成了3.9mm,再重复这一操作,页边距又变成了1.5mm,依此类推。之所以会出现不正常的现象,都是因为制式转换导致的——.NET对于页边距是绝对的“大国沙文主义”,只认美制的“英寸”不认别的制式,其默认单位是“0.01英寸”。而我们的OS就比较入乡随俗,知道用“毫米”。所以在PageSetupD

4、ialog窗体上中显示的单位是“毫米”(取决于OS)。由于两边制式不一样,搭不上话,.NET就会强制的把OS的制式单位给转换成它“习惯”的“英寸”。也就是说:在你点击“页面设置”对话框的“确定”按钮后,.NET会自动进行“毫米->英寸”的隐式转换。本来这也没什么大不了,问题出现在:再度打开PageSetupDialog对话框时,PageSetupDialog对象却并没有进行与上面的隐式转换对应的“英寸->毫米”逆向转换,而仅仅是简单粗暴地将单位名改了,从“Display”(0.01英寸)改成了“Tenth

5、sOfAMillimeter”(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度量衡设置操作系统是根据安装时选择的地区来确定不同的默

6、认度量衡制式。我国用的度量衡系统是“公制”(米/厘米/毫米),而MS所在的美国用的是“美制”(英尺/英寸)。在XP系统下,可以通过“控制面板”->“区域和语言选项”->“区域选项”->“标准和格式”->“自定义”->“数字”->“度量衡系统”来设置当前的度量衡制式。把度量衡系统由“公制”改成“美国”,再去试验一切OK,只不过页边距后面括号里的单位描述变成了“英寸”。OK的原因很简单,不需要转换了嘛。第二个办法:编写代码将英寸正确的转换到毫米我们可以利用.NET提供的PrinterUnitConvert类的

7、Convert方法来实现这个目标,代码如下:privatevoidbtnPageSetup_Click(objectsender,EventArgse){PageSetupDialogpsd=newPageSetupDialog();psd.Document=printDocument1;Marginsmg=printDocument1.DefaultPageSettings.Margins;//保存原始Marginspsd.PageSettings.Margins=PrinterUnitConvert.

8、Convert(mg,PrinterUnit.Display,PrinterUnit.TenthsOfAMillimeter);if(psd.ShowDialog()==DialogResult.Cancel){//psd.PageSettings.Margins改变导致printDocument1.DefaultPageSettings.Margins也随之改变,//所以为了避免点了Cancel后,下一次打开对话框时mg被错

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。