PrinterBase.cs
上传用户:jx_fiona
上传日期:2014-03-08
资源大小:1387k
文件大小:6k
源码类别:

打印编程

开发平台:

Others

  1. using System;
  2. using System.Drawing;
  3. using System.Drawing.Printing;
  4. namespace GoldPrinter
  5. {
  6. /// <summary>
  7. /// PrinterBase打印基类,描述打印文档及边距信息,继承于DrawBase(IDraw),不能实倒化。
  8. /// 
  9. /// 
  10. /// 作 者:长江支流(周方勇)
  11. /// Email:flygoldfish@163.com  QQ:150439795
  12. /// 网 址:www.webmis.com.cn
  13. /// ★★★★★您可以免费使用此程序,但是请您完整保留此说明,以维护知识产权★★★★★
  14. /// 
  15. /// </summary>
  16. public abstract class PrinterBase:DrawBase
  17. {
  18.         //private int ADD_PRINTER_MARGINS = 3;         //打印时,为上下左右边距再预留空间       
  19.         private PrintDocument _printDocument;         //打印文档,注意PrintDocument的改变将直接影响页边距等。
  20.         //注:2004-09-20 经过仔细考虑,装订线Sewing不再影响页边距等,影响页边距仅仅是PrintDocument。
  21.         // 但是由于由PrintDocument计算边距花费时间很长,影响效率,因此改变此属性后在这不直接重新计算页边距,请手动调用CalculatePageInfo()。
  22.         // 如果调用的次数太多,最好将计算后将PrinterMargins保存后以后赋给PrinterMargins属性,不再调用CalculatePageInfo(),除非PrintDocument发生变化,以提高系统效率。
  23.         
  24.         //以下几个是受PrintDocument影响,因此PrintDocument字段值一改变,这几个字段的值要重新计算,为了效率,请手动调用CalculatePageInfo()。
  25.         private PrinterMargins _printerMargins;     //打印页的边距及有效打印宽及高,改变PrinterMargins属性将会调用 SetPageInfo();
  26.         private int _pageWidth;     //页面宽
  27.         private int _pageHeight;     //页面高
  28.         private int _leftMargin;     //页面左边距
  29.         private int _rightMargin;     //页面右边距
  30.         private int _topMargin;     //页面顶边距
  31.         private int _bottomMargin;     //页面底边距
  32.         #region  ************字段属性************
  33.         /// <summary>
  34.         /// 获取或设置打印文档,PrintDocument的改变将直接影响页边距等,但为了效率,请手动调用CalculatePageInfo()才去计算。
  35.         /// </summary>
  36.         public PrintDocument PrintDocument
  37.         {
  38.             get
  39.             {
  40.                 return this._printDocument;
  41.             }
  42.             set
  43.             {
  44.                 if (value != null)
  45.                 {
  46.                     this._printDocument = value;
  47.                 }
  48.             }
  49.         }
  50.         
  51.         /// <summary>
  52.         /// 获取或设置打印页的边距及有效打印宽及高
  53.         /// </summary>
  54.         public PrinterMargins PrinterMargins
  55.         {
  56.             get
  57.             {
  58.                 return this._printerMargins;
  59.             }
  60.             set
  61.             {
  62.                 if (value != null)
  63.                 {
  64.                     this._printerMargins = value;
  65.                     SetPageInfo();
  66.                 }
  67.             }
  68.         }
  69. /// <summary>
  70.         /// 获取页面总宽,包括页边距
  71.         /// </summary>
  72.         public int PageWidth
  73.         {
  74.             get{return this._pageWidth;}
  75.         }
  76.         /// <summary>
  77.         /// 获取页面总高,包括页边距
  78.         /// </summary>
  79.         public int PageHeight
  80.         {
  81.             get{return this._pageHeight;}
  82.         }
  83.         /// <summary>
  84.         /// 获取页左边距
  85.         /// </summary>
  86.         public int LeftMargin
  87.         {
  88.             get{return this._leftMargin;}
  89.         }
  90.         /// <summary>
  91.         /// 获取页右边距
  92.         /// </summary>
  93.         public int RightMargin
  94.         {
  95.             get{return this._rightMargin;}
  96.         }
  97.         /// <summary>
  98.         /// 获取页顶边距
  99.         /// </summary>
  100.         public int TopMargin
  101.         {
  102.             get{return this._topMargin;}
  103.         }
  104.         /// <summary>
  105.         /// 获取页底边距
  106.         /// </summary>
  107.         public int BottomMargin
  108.         {
  109.             get{return this._bottomMargin;}
  110.         }
  111.         #endregion
  112.         
  113.         public PrinterBase()
  114. {
  115.             //实例化(单件模式)
  116.             _printDocument = PrinterSingleton.PrintDocument;
  117.             _printerMargins = PrinterSingleton.PrinterMargins; //提高效率,因为本类是打印的对象都是超类,所以每次实例化时都要根据PrintDocument计算边距花费时间太长。
  118.             SetPageInfo();
  119.         }
  120. //        public override void Dispose()
  121. //        {
  122. //            base.Dispose ();
  123. //
  124. //            _printDocument.Dispose();
  125. //        }
  126.         public void CalculatePageInfo()
  127.         {
  128.             this.PrinterMargins = new PrinterMargins(this.PrintDocument);
  129.             SetPageInfo();
  130.         }
  131.         /// <summary>
  132.         /// 设置PrintDocument后可能影响到一些变量的变动,如PrintDocument改变了,就要重求PageWidthHeight等,装订变了,就会影响PrinterMargins等
  133.         /// </summary>
  134.         private void SetPageInfo()
  135.         {
  136.             //获取系统非打印区域边距
  137.             this._leftMargin = this.PrinterMargins.Left;
  138.             this._topMargin = this.PrinterMargins.Top;
  139.             this._rightMargin = this.PrinterMargins.Right;
  140.             this._bottomMargin = this.PrinterMargins.Bottom;
  141.             //注意PrinterMargins.Width/Height仅仅是打印区的宽与高
  142.             this._pageWidth = this.PrinterMargins.Width + this._leftMargin + this._rightMargin;
  143.             this._pageHeight = this.PrinterMargins.Height + this._topMargin + this._bottomMargin;
  144.         }
  145.         //加上相应的非打印区域
  146.         private void AddNonePrintArea()
  147.         {
  148.             /*
  149.             this._printerMargins.Left   += ADD_PRINTER_MARGINS;
  150.             this._printerMargins.Right  += ADD_PRINTER_MARGINS;
  151.             this._printerMargins.Top    += ADD_PRINTER_MARGINS;
  152.             this._printerMargins.Bottom += ADD_PRINTER_MARGINS;
  153.             this._printerMargins.Width  -= ADD_PRINTER_MARGINS * 2;
  154.             this._printerMargins.Height -= ADD_PRINTER_MARGINS * 2;            
  155.             */
  156.         }
  157.    
  158.     }//End Class
  159. }//End NameSpace