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

打印编程

开发平台:

Others

  1. using System;
  2. using System.Drawing;
  3. using System.Drawing.Printing;
  4. namespace GoldPrinter
  5. {
  6. /// <summary>
  7. /// 继承于DrawBase,在绘图表面Graphics绘制矩阵区域Rectangle用指定的画笔Brush、Pen绘制Draw() 格式为StringFormat、字体Font的文本Text。
  8. /// 
  9. /// 作 者:长江支流(周方勇)
  10. /// Email:flygoldfish@163.com  QQ:150439795
  11. /// 网 址:www.webmis.com.cn
  12. /// ★★★★★您可以免费使用此程序,但是请您完整保留此说明,以维护知识产权★★★★★
  13. /// 
  14. /// </summary>
  15. public class DrawText:DrawBase
  16. {
  17. private string _text;
  18. private Font _font;
  19. private StringFormat _stringFormat;
  20. private int _startChar;
  21. private int _linesFilled;
  22. private int _charsFitted;
  23. private bool _hasMorePages; //是否还没有打完
  24. #region 字段属性
  25. /// <summary>
  26. /// 获取或设置要绘制的文本
  27. /// </summary>
  28. public string Text
  29. {
  30. get
  31. {
  32. return _text;
  33. }
  34. set
  35. {
  36. _text = value;
  37. }
  38. }
  39. /// <summary>
  40. /// 获取或设置绘制的文本字体
  41. /// </summary>
  42. public Font Font
  43. {
  44. get
  45. {
  46. return _font;
  47. }
  48. set
  49. {
  50. if (value != null)
  51. {
  52. _font = value;
  53. }
  54. }
  55. }
  56. /// <summary>
  57. /// 获取或设置要绘制的文本的格式,如行距
  58. /// </summary>
  59. public StringFormat StringFormat
  60. {
  61. get
  62. {
  63. return _stringFormat;
  64. }
  65. set
  66. {
  67. _stringFormat = value;
  68. }
  69. }
  70. /// <summary>
  71. /// 获取或设置要绘制的文本时的起始字符,即从第几个开始。如果小于0则从最开始的符绘起,如大于或等于文本长度,则不绘制。
  72. /// </summary>
  73. public int StartChar
  74. {
  75. get
  76. {
  77. return _startChar;
  78. }
  79. set
  80. {
  81. _startChar = value;
  82. if (_startChar < 0)
  83. {
  84. _startChar = 0;
  85. }
  86. else if(_startChar >= this.Text.Length)
  87. {
  88. _startChar = this.Text.Length;
  89. }
  90. }
  91. }
  92. /// <summary>
  93. /// 获取绘制区内绘制的文本数
  94. /// </summary>
  95. public int CharsFitted
  96. {
  97. get
  98. {
  99. return _charsFitted;
  100. }
  101. }
  102. /// <summary>
  103. /// 获取绘制区内绘制的文本行数
  104. /// </summary>
  105. public int LinesFilled
  106. {
  107. get
  108. {
  109. return _linesFilled;
  110. }
  111. }
  112. /*
  113. /// <summary>
  114. /// 获取是否还有没有打印完的文本
  115. /// </summary>
  116. public int HasMorePages
  117. {
  118. get
  119. {
  120. return _hasMorePages;
  121. }
  122. }
  123. */
  124. #endregion
  125. #region 构造函数
  126. /// <summary>
  127. /// 获取DrawText新的实例,默认字体为宋体10号,受限制行LineLimit格式绘制
  128. /// </summary>
  129. public DrawText()
  130. {
  131. _text = "";
  132. _font = new Font("宋体",10);
  133. _startChar = 0;
  134. _linesFilled = 0;
  135. _charsFitted = 0;
  136. _stringFormat = new StringFormat(StringFormatFlags.LineLimit);
  137. }
  138. /// <param name="text">指定绘制的文本</param>
  139. public DrawText(string text):this()
  140. {
  141. _text = text;
  142. }
  143. #endregion
  144. /// <summary>
  145. /// 释放对象使用的所有资源
  146. /// </summary>
  147. public override void Dispose()
  148. {
  149. base.Dispose ();
  150. this._font.Dispose();
  151. this._stringFormat.Dispose();
  152. }
  153. //一次可以打印不完
  154. private void DrawOnePage()
  155. {
  156. if (this.Graphics != null)
  157. {
  158. int intLinesFilled, intCharsFitted;
  159. this.Graphics.MeasureString(_text.Substring(_startChar),_font,new SizeF(this.Rectangle.Width, this.Rectangle.Height),_stringFormat,out intCharsFitted,out intLinesFilled);
  160. this.Graphics.DrawString(_text.Substring(_startChar),_font,this.Brush,this.Rectangle,_stringFormat);
  161. this._linesFilled = intLinesFilled;
  162. this._charsFitted = intCharsFitted;
  163. }
  164. }
  165. /// <summary>
  166. /// 在绘图表面Graphics不为空的情况下,绘制矩阵区域Rectangle用指定的画笔Brush、Pen绘制Draw() 格式为StringFormat、字体Font的文本Text
  167. /// </summary>
  168. public override void Draw()
  169. {
  170. DrawOnePage();
  171. }
  172. //其它...
  173. private static int intCurrentCharIndex; //静态量,记住打印的起始字符
  174. private bool Draw(DrawText p_drawText,string p_text)
  175. {
  176. DrawText mdrawText = new DrawText(p_text);
  177. // mdrawText.Draw();
  178. mdrawText = this;
  179. mdrawText.StartChar = intCurrentCharIndex;
  180. intCurrentCharIndex += mdrawText.CharsFitted;
  181. if (intCurrentCharIndex < p_text.Length)
  182. {
  183. return true;
  184. }
  185. else
  186. {
  187. intCurrentCharIndex = 0; //打印结束后一定要再重置
  188. return false;
  189. }
  190. }
  191. }//End Class
  192. }//End Namespace