PrinterMargins.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. /// 继承于Margins,用于描述打印页的边距及有效打印宽及高。
  8. /// 注意Margins使用的默认单位是PrinterUnit.Display即百分之一英寸即0.01。
  9. /// 
  10. /// 作 者:长江支流(周方勇)
  11. /// Email:flygoldfish@163.com  QQ:150439795
  12. /// 网 址:www.webmis.com.cn
  13. /// ★★★★★您可以免费使用此程序,但是请您完整保留此说明,以维护知识产权★★★★★
  14. /// 
  15. /// </summary>
  16. public class PrinterMargins:Margins
  17. {
  18. #region *****图例*****
  19. //对象的图形表示,外边界是打印纸,内面矩形为打印区
  20. //打印区的四个点的记法:从左到右竖线为X1、X2,从上到下横线为Y1、Y2
  21. //__________________________________________
  22. // |
  23. // |
  24. //     A |
  25. //     | |
  26. //    Top |
  27. //     |                   |
  28. //     V |
  29. // |
  30. // (X1,Y1) (X2,Y1) |
  31. //  ___________y1________ |
  32. // |   | |
  33. // | WIDTH   | |
  34. // | H | |
  35. // | E | |
  36. //<--Left-->| I |<-Right->|
  37. // x1 G x2 |
  38. // | H |  |
  39. // | T | |
  40. // |___________y2________| |
  41. // |
  42. // (X1,Y2) (X2,Y2) |
  43. // |
  44. // A |
  45. // | |
  46. //  Bottom |
  47. //     |                   |
  48. // V |
  49. //__________________________________________|
  50. // 对象的图形表示
  51. #endregion
  52. int _width,_height; //打印页有效打印宽及高,在图中为内面矩形
  53.         int _X1,_X2; //从左到右竖线为X1、X2 只能读取
  54. int _Y1,_Y2; //从上到下横线为Y1、Y2 只能读取
  55. #region 字段属性
  56. /// <summary>
  57. /// 获取或设置有效打印宽
  58. /// </summary>
  59. public int Width
  60. {
  61. get{return _width;}
  62. set{_width = value;}
  63. }
  64. /// <summary>
  65. /// 获取或设置有效打印高
  66. /// </summary>
  67. public int Height
  68. {
  69. get{return _height;}
  70. set{_height = value;}
  71. }
  72. /// <summary>
  73. /// 获取有效打印区左边边界的X横坐标
  74. /// </summary>
  75. public int X1
  76. {
  77. get{return _X1;}
  78. }
  79. /// <summary>
  80. /// 获取有效打印区右边边界的X横坐标
  81. /// </summary>
  82. public int X2
  83. {
  84. get{return _X2;}
  85. }
  86. /// <summary>
  87. /// 获取有效打印区上边边界的Y纵坐标
  88. /// </summary>
  89. public int Y1
  90. {
  91. get{return _Y1;}
  92. }
  93. /// <summary>
  94. /// 获取有效打印区下边边界的Y纵坐标
  95. /// </summary>
  96. public int Y2
  97. {
  98. get{return _Y2;}
  99. }
  100. #endregion
  101. /// <summary>
  102. /// 使用 1 个单位(没有具体指明是英寸还是什么)边距初始化 System.Drawing.Printing.Margins 类的新实例。
  103. /// </summary>
  104. public PrinterMargins():this(1,1,1,1,0,0)
  105. {
  106. }
  107. /// <summary>
  108. /// 用指定的边距及有效打印宽、高初始类的新实例
  109. /// </summary>
  110. /// <param name="left">左边距</param>
  111. /// <param name="right">右边距</param>
  112. /// <param name="top">上边距</param>
  113. /// <param name="bottom">下边距</param>
  114. /// <param name="width">有效打印区的宽</param>
  115. /// <param name="height">有效打印区的高</param>
  116. public PrinterMargins(int left,int right,int top,int bottom,int width,int height):base(left,right,top,bottom)
  117. {
  118. _width = width;
  119. _height = height;
  120. Calculate();
  121. }
  122. /// <summary>
  123. /// 根据指定的打印文档对象初始实例化对象的 left,right,top,bottom,width,height边距及有效打印区的宽、高
  124. /// </summary>
  125. /// <param name="printDocument"></param>
  126.         public PrinterMargins(PrintDocument printDocument)
  127.         {
  128.             PrinterMargins printerMargins = new PrinterMargins();
  129.             printerMargins = GetPrinterMargins(printDocument);
  130.             this.Left   = printerMargins.Left;
  131.             this.Right  = printerMargins.Right;
  132.             this.Top    = printerMargins.Top;
  133.             this.Bottom = printerMargins.Bottom;
  134.             this.Width  = printerMargins.Width;
  135.             this.Height = printerMargins.Height;
  136.             printerMargins = null;
  137.             Calculate();
  138.         }
  139.         /// <summary>
  140.         /// 通过PrintDocument获取一个PrinterMargins对象
  141.         /// </summary>
  142.         /// <param name="printDocument"></param>
  143.         /// <returns></returns>
  144.         private PrinterMargins GetPrinterMargins(PrintDocument printDocument)
  145.         {
  146.             //用于返回的变量
  147.             PrinterMargins printerMargins;
  148.             //绘图起始座标及字符串的宽与高
  149.             int left,right,top,bottom,width,height;
  150. left = printDocument.DefaultPageSettings.Margins.Left;
  151. right = printDocument.DefaultPageSettings.Margins.Right;
  152. top = printDocument.DefaultPageSettings.Margins.Top;
  153. bottom = printDocument.DefaultPageSettings.Margins.Bottom;
  154.             width = printDocument.DefaultPageSettings.PaperSize.Width;
  155.             height = printDocument.DefaultPageSettings.PaperSize.Height;
  156.             //横向使得宽与高交换
  157.             if (printDocument.DefaultPageSettings.Landscape)
  158.             {
  159.                 Swap(ref width,ref height);
  160.             }
  161.             //宽与高为打印区的宽,所以是页面宽与高减去相应的边距
  162.             width = width - left - right;
  163.             height = height - top - bottom;
  164.             //实例化并返回
  165.             printerMargins = new PrinterMargins(left ,right,top , bottom ,width ,height);
  166.             return printerMargins;        
  167.         }
  168.         //交换两数
  169.         private void Swap(ref int ValA,ref int ValB)
  170.         {
  171.             int tmp = ValA;
  172.             ValA = ValB;
  173.             ValB = tmp;        
  174.         }
  175. //计算
  176. private void Calculate()
  177. {
  178. _X1 = this.Left;
  179. _X2 = this.Left + _width;
  180. _Y1 = this.Top;
  181. _Y2 = this.Top + _height;
  182. }
  183. }//End Class
  184. }//End NameSpace