到网上一搜,有很多关于打印页面设置值怎么老是变、自定义纸张和连续走纸的问题。有很多说法,有些说是VS.NET的bug,有的说必须用API,还有的说...
其实,是我们自己没有研究透,这里给一些解决办法。
用PageSetupDialog做打印页面设置值时,每显示一次对话框输入页边距,下次再进入页面设置对话框输后发现原来的值变了,再下次再变?
为什么呢,这并不是VS.net的bug,其实不能怪微软,人家是做全球的,而我们使用的是中文版,存在一个公制和美制的单位转换问题。
一般使用页面设置值对话框时是把工具箱中的这个控件拖到窗口用,其实这样不方便,也不利于代码的复用和统一。我做了一个 PrinterPageSetting类,把有关打印方面的对话框进行了二次封装,特别方便使用。并在我的Blog中写了两篇文档,并为CSDN主页收录为头条精华。下面给出链接:
NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现及应用: http://blog.csdn.net/flygoldfish/archive/2004/08/17/77208.aspx
http://blog.csdn.net/flygoldfish/archive/2004/09/06/95685.aspx
并把关于页面设置对话框的源码列出来,以供大家参考:
#region 页面设置对话框 protected virtual PageSettings ShowPageSetupDialog(PrintDocument printDocument)
///
/// 页面设置对话框,可以独立使用
///
///
///
///
/// 作 者:周方勇
/// 修改日期:2004-08-07
///
protected virtual PageSettings ShowPageSetupDialog(PrintDocument printDocument)
{
//检查printDocument是否为空,空的话抛出异常
ThrowPrintDocumentNullException(printDocument);
//声明返回值的PageSettings
PageSettings ps = new PageSettings();
//申明并实例化PageSetupDialog
PageSetupDialog psDlg = new PageSetupDialog();
ps = printDocument.DefaultPageSettings;
try
{
//相关文档及文档页面默认设置
psDlg.Document = printDocument;
Margins mg = printDocument.DefaultPageSettings.Margins;
if (System.Globalization.RegionInfo.CurrentRegion.IsMetric)
{
mg = PrinterUnitConvert.Convert(mg, PrinterUnit.Display, PrinterUnit.TenthsOfAMillimeter);
}
//备份打印文档的DefaultPageSettings,因为转换后会改变,而设置对话框单击取消按钮后不还原就不能正确显示原来的值
PageSettings psPrintDocumentBack = (PageSettings)(printDocument.DefaultPageSettings.Clone());
psDlg.PageSettings = psPrintDocumentBack;//printDocument.DefaultPageSettings; //用printDocument的时取消了对话框就要还原
psDlg.PageSettings.Margins = mg;
//显示对话框
DialogResult result = psDlg.ShowDialog();
if (result == DialogResult.OK)
{
ps = psDlg.PageSettings;
printDocument.DefaultPageSettings = psDlg.PageSettings;
}
else
{
}
}
catch(System.Drawing.Printing.InvalidPrinterException e)
{
ShowInvalidPrinterException(e);
}
catch(Exception ex)
{
ShowPrinterException(ex);
}
finally
{
psDlg.Dispose();
psDlg = null;
}
return ps;
}
#endregion
至此,关于打印页面设置对话框值老是变化的问题已得到解决。在接下来(下篇)的文章中,我们一起来解决自定义纸张的问题,看看至少不用API能不能实现自下定义纸张和连续走纸?
本文全部源码及各种打印免费下载请访问我在CSDN上的Blog:
http://blog.csdn.net/flygoldfish
声明:本文版权为周方勇所有,如需转载,请保留完整的内容及出处。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=595068
[点击此处收藏本文] 发表于 2006年02月09日 11:14 AM
长江支流 发表于2006-02-09 11:42 AM IP: 211.100.21.*
TrackBack来自《开源:VS.NET打印页面设置(PageSetupDialog)值老是变、自定义纸张和连续走纸的问题及解决源码(二)》:
到网上一搜,有很多关于打印页面设置值怎么老是变、自定义纸张和连续走纸的问题。有很多说法,有些说是VS.NET的bug,有的说必须用API,还有的说...
其实,是我们自己没有研究透,这里给一些解决办法。