NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现-

 到网上一搜,有很多关于打印页面设置值怎么老是变、自定义纸张和连续走纸的问题。有很多说法,有些说是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,还有的说...
其实,是我们自己没有研究透,这里给一些解决办法。

posted @ 2012-06-27 22:58  小软狐  阅读(1119)  评论(1编辑  收藏  举报