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

打印编程

开发平台:

Others

  1. using System;
  2. using System.Drawing;
  3. using System.Collections;
  4. using System.ComponentModel;
  5. using System.Windows.Forms;
  6. using System.Data;
  7. using GoldPrinter;
  8. namespace MisGoldPrinterTest
  9. {
  10. /// <summary>
  11. /// 打印示例--对象定制、变换无穷(装订线、多层表头、每页小计...)
  12. /// 注意:你只要牢记打印对象(除标题)的核心是二维数组,那么就轻松了
  13. /// </summary>
  14. public class frmCompletePrint : System.Windows.Forms.Form
  15. {
  16. #region Windows 窗体设计器生成的代码
  17. private System.Windows.Forms.MainMenu mainMenu1;
  18. private System.Windows.Forms.MenuItem menuFile;
  19. private System.Windows.Forms.MenuItem menuFilePageSetup;
  20. private System.Windows.Forms.MenuItem menuFilePrintPreview;
  21. private System.Windows.Forms.MenuItem menuFilePrint;
  22. private System.Windows.Forms.DataGrid dataGrid1;
  23. /// <summary>
  24. /// 必需的设计器变量。
  25. /// </summary>
  26. private System.ComponentModel.Container components = null;
  27. public frmCompletePrint()
  28. {
  29. //
  30. // Windows 窗体设计器支持所必需的
  31. //
  32. InitializeComponent();
  33. //
  34. // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
  35. //
  36. }
  37. /// <summary>
  38. /// 清理所有正在使用的资源。
  39. /// </summary>
  40. protected override void Dispose( bool disposing )
  41. {
  42. if( disposing )
  43. {
  44. if(components != null)
  45. {
  46. components.Dispose();
  47. }
  48. }
  49. base.Dispose( disposing );
  50. }
  51. /// <summary>
  52. /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  53. /// 此方法的内容。
  54. /// </summary>
  55. private void InitializeComponent()
  56. {
  57. this.mainMenu1 = new System.Windows.Forms.MainMenu();
  58. this.menuFile = new System.Windows.Forms.MenuItem();
  59. this.menuFilePageSetup = new System.Windows.Forms.MenuItem();
  60. this.menuFilePrintPreview = new System.Windows.Forms.MenuItem();
  61. this.menuFilePrint = new System.Windows.Forms.MenuItem();
  62. this.dataGrid1 = new System.Windows.Forms.DataGrid();
  63. ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
  64. this.SuspendLayout();
  65. // 
  66. // mainMenu1
  67. // 
  68. this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
  69.   this.menuFile});
  70. // 
  71. // menuFile
  72. // 
  73. this.menuFile.Index = 0;
  74. this.menuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
  75.  this.menuFilePageSetup,
  76.  this.menuFilePrintPreview,
  77.  this.menuFilePrint});
  78. this.menuFile.Text = "&File";
  79. // 
  80. // menuFilePageSetup
  81. // 
  82. this.menuFilePageSetup.Index = 0;
  83. this.menuFilePageSetup.Text = "Page Set&up";
  84. this.menuFilePageSetup.Click += new System.EventHandler(this.menuFilePageSetup_Click);
  85. // 
  86. // menuFilePrintPreview
  87. // 
  88. this.menuFilePrintPreview.Index = 1;
  89. this.menuFilePrintPreview.Text = "Print Pre&view";
  90. this.menuFilePrintPreview.Click += new System.EventHandler(this.menuFilePrintPreview_Click);
  91. // 
  92. // menuFilePrint
  93. // 
  94. this.menuFilePrint.Index = 2;
  95. this.menuFilePrint.Text = "&Print";
  96. this.menuFilePrint.Click += new System.EventHandler(this.menuFilePrint_Click);
  97. // 
  98. // dataGrid1
  99. // 
  100. this.dataGrid1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
  101. | System.Windows.Forms.AnchorStyles.Left) 
  102. | System.Windows.Forms.AnchorStyles.Right)));
  103. this.dataGrid1.DataMember = "";
  104. this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
  105. this.dataGrid1.Location = new System.Drawing.Point(0, 0);
  106. this.dataGrid1.Name = "dataGrid1";
  107. this.dataGrid1.Size = new System.Drawing.Size(704, 408);
  108. this.dataGrid1.TabIndex = 1;
  109. // 
  110. // frmCompletePrint
  111. // 
  112. this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
  113. this.ClientSize = new System.Drawing.Size(704, 409);
  114. this.Controls.Add(this.dataGrid1);
  115. this.Menu = this.mainMenu1;
  116. this.Name = "frmCompletePrint";
  117. this.Text = "对象定制、变换无穷 -- MIS金质打印通 使用示例(C#版)";
  118. this.Load += new System.EventHandler(this.frmAllPrint_Load);
  119. this.Closed += new System.EventHandler(this.frmAllPrint_Closed);
  120. ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
  121. this.ResumeLayout(false);
  122. }
  123. #endregion
  124. private GoldPrinter.MisGoldPrinter misGoldPrinter = new GoldPrinter.MisGoldPrinter();
  125. //*****第N步*****:打印或预览 菜单:页面设置、打印机设置、打印预览
  126. private void menuFilePageSetup_Click(object sender, System.EventArgs e)
  127. {
  128. misGoldPrinter.PageSetup();
  129. }
  130. private void menuFilePrint_Click(object sender, System.EventArgs e)
  131. {
  132. Print(true);
  133. }
  134. private void menuFilePrintPreview_Click(object sender, System.EventArgs e)
  135. {
  136. Print(false);
  137. }
  138. //打印比较全的例子,可以对每一个打印对象设置特性
  139. //***************注意:你只要牢记打印对象(除标题)的核心是二维数组,那么就轻松了***************
  140. private void Print(bool print)
  141. {
  142. #region 打印比较全的例子,好些网友来信问使用说明,哈哈,就是这个了,程序使用及注释就是最好的说明。
  143. //打印组件申明并实例化,可以定义为全局的
  144. //MisGoldPrinter misGoldPrinter = new MisGoldPrinter();
  145. //misGoldPrinter.BackColor = Color.FloralWhite; //背景色
  146. //misGoldPrinter.IsPrinterMargins = true; //试试看,去掉注释后就明白了
  147. //misGoldPrinter.RowsPerPage = 20; //可以指定每页打印的行数,默认自适应
  148. //misGoldPrinter.GridBorder = GoldPrinter.GridBorderFlag.SingleBold; //边框,有单边框、双边框等形式
  149. misGoldPrinter.DocumentName = "MIS金质打印通 通打天下报表";
  150. //主标题
  151. Title title = new Title();
  152. title.Text = "WebMIS.Net快速开发工具nWWW.WebMIS.COM.CN";
  153. misGoldPrinter.Title = title; //等效于misGoldPrinter.Title = "misGoldPrinter.Net快速开发工具nWWW.AlinkSoft.COM";
  154. //子标题(可选)
  155. misGoldPrinter.Caption = "  ——之GoldPrinter(金质打印通),欢迎下载"; //但对象方式(见misGoldPrinter.Title)更具特性,因为还可以定义字体等
  156. //页顶(可选)
  157. //可以是以'|'分隔的字符串或一维数组或具有更多特性的Top/Bottom对象
  158. misGoldPrinter.Top = "作者:周方勇|2004-08-19|版本:V2.5"; //等价于 misGoldPrinter.Top = new string[]{"作者:周方勇","2004-08-19","版本:V2.5"};
  159. //((GoldPrinter.Top)(misGoldPrinter.Top)).IsDrawAllPage = false; //可以设置是否每页都打印,页顶、页头默认第一页打印,而页脚与页底默认最后一页打印
  160. #region 网格头说明(可选)
  161. Header header = new Header(3,4); //行列数基本不受限制,但超过一页失去意义,因为以Body为主,以其它为辅
  162. header.IsDrawAllPage = true; //可以指定每页是否重复打印
  163. header.SetText(0,0,"Header00"); //实际上可以设置header.DataSource
  164. header.SetText(0,1,"Header01"); //DataSource可以是字符串、一维数组、二维数组、DataTable、WinDataGrid、WebDataGrid、ListViewListView、
  165. header.SetText(0,2,"Header02"); //MSHFlexGrid、HtmlTable等等二维形式
  166. header.SetText(0,3,"Header03"); //
  167. header.SetText(1,0,"Header10"); //同仁们还可以根据实际应用对GridBase的DataSource进行扩展
  168. header.SetText(1,1,"Header11");
  169. header.SetText(1,2,"Header12");
  170. header.SetText(1,3,"Header13");
  171. header.SetText(2,0,"Header20");
  172. header.SetText(2,1,"Header21");
  173. header.SetText(2,2,"Header22");
  174. header.SetText(2,3,"Header23");
  175. misGoldPrinter.Header = header; //将定制对象,赋给页头
  176. #endregion 
  177. #region 网格标题(多层表头,符合中国人习惯),可选
  178. MultiHeader multiHeader = new MultiHeader(2,6); //两行6列的要合并分类说明的表头,如果只是单行表头且只要占用一行高度,用new MultiHeader(1,6)并用SetText赋值即可
  179. multiHeader.SetMergeTextOnColSel(0,0,1,"  项目nNo  ");
  180. multiHeader.IsDrawDiagonalLine = true;
  181. multiHeader.DiagonalLineRows = 2; //试试其它的数如3  又如1.5F
  182. multiHeader.SetMergeTextOnColSel(1,0,1,"产品n名称"); //等价于 //multiHeader.SetText(1,1,"产品n名称");
  183. //multiHeader.SetText(0,1,"产品n名称");
  184. multiHeader.SetText(0,2,"规格");
  185. //multiHeader.SetText(0,3,"订量信息");
  186. multiHeader.SetMergeTextOnRowSel(0,3,5,"订量信息"); //等价于 //multiHeader.SetText(0,4,"订量信息");
  187. //multiHeader.SetText(0,5,"订量信息");
  188. multiHeader.SetText(1,2,"规格");
  189. multiHeader.SetText(1,3,"单价");
  190. multiHeader.SetText(1,4,"数量");
  191. multiHeader.SetText(1,5,"金额");
  192. multiHeader.ColsWidth = new int[]{50,100,120,80,100,150}; //指定每页列宽,因为是Body明细的列标题,所以明细的列宽和它设置一样。当然,你也可以不做明细的列标题
  193. misGoldPrinter.MultiHeader = multiHeader;
  194. #endregion 
  195. //*****数据网格主体(必选)*****
  196. Body body = new Body();
  197. body.ColsAlignString = "CLCRRR"; //由左中右第一个字母组成,对应于每列的对对齐方式
  198. //只要是二维数组,都可以,因此DataGrid、MSHFlexGrid、DBGrid、DataTable、HtmlTable、ListView等等都OK
  199. //这里用DataGrid作一个例子。不过,你自己可以写一个函数,把没有支持的二维控件转换成数组就OK了
  200. //body.DataSource = this.GetDataSource(500);
  201. //body.DataSource = (DataTable)(this.dataGrid1.DataSource); //或者
  202. //body.DataSource = this.dataGrid1.DataSource; //或者
  203. body.DataSource = this.dataGrid1; //或者
  204. body.IsAverageColsWidth = false;
  205. //body.RowHeight = 20; //可指定行高
  206. body.ColsWidth = new int[]{50,100,120,80,100,150}; //若多层表头是些明细的列标题,列宽设置一样。注意单位用控件的显示单位,即像素,一毫约4个像素
  207.             
  208. int mcols = 6;
  209. #region 这是数组的例子,把body.DataSource = (DataTable)(this.dataGrid1.DataSource);注释掉,去掉下面的注释看看
  210. /*
  211. int mrows = 50;//111;
  212. string[,] arrstrGrid = new string[mrows,mcols];
  213. for(int i=0 ;i< mrows ; i++)
  214. {
  215. for(int j=0 ;j< mcols-1 ; j++)
  216. {
  217. arrstrGrid[i,j] = (i + 1).ToString() + "行" + (j + 1).ToString() + "列";
  218. }
  219. arrstrGrid[i,0] = (i + 1).ToString();
  220. arrstrGrid[i,mcols-1] = (i + 1).ToString();
  221. }
  222. body.DataSource = arrstrGrid; //body.GridText = arrstrGrid;
  223. */
  224. #endregion
  225. //body.Grid.ColsWidth = new int[]{20,50,100,200,300};
  226. misGoldPrinter.Body = body;
  227. //misGoldPrinter.DataSource = this.dataGrid1; //如果直接打印网格,可以不用定义Body,用这一句就够了,可加上下一句设置列宽
  228. //((Body)(misGoldPrinter.Body)).ColsWidth = new int[]{20,50,100,200,300};
  229. misGoldPrinter.IsSubTotalPerPage = true; //这是打印本页小计
  230. misGoldPrinter.SubTotalColsList = (mcols-2).ToString() + ";" + (mcols-1).ToString(); //用分号分隔的要求小计的列
  231. #region 网格下说明(可选)
  232. Footer footer = new Footer(2,5);
  233. footer.SetText(0,0,"Footer00");
  234. footer.SetText(0,1,"Footer01");
  235. footer.SetText(0,2,"Footer02");
  236. footer.SetText(0,3,"Footer03");
  237. footer.SetText(0,4,"Footer04");
  238. footer.SetText(1,0,"Footer10");
  239. footer.SetText(1,1,"Footer11");
  240. footer.SetText(1,2,"Footer12");
  241. footer.SetText(1,3,"Footer13");
  242. footer.SetText(1,4,"Footer14");
  243. footer.IsDrawAllPage = true;
  244. misGoldPrinter.Footer = footer;
  245. #endregion
  246. #region 数据底(可选)
  247. GoldPrinter.Bottom bottom = new Bottom(); //Top/Bottom的另一种方式
  248. bottom.Text =  "打印程序开源版||打印日期:" + System.DateTime.Now.ToLongDateString(); //用|分隔的三列文本,分别居左、居中、居右在页面中
  249. misGoldPrinter.Bottom = bottom;
  250. #endregion
  251. #region 装订线(可选)
  252. Sewing sewing = new Sewing(20,SewingDirectionFlag.Left); //左装订,边距为20个显示单位
  253. misGoldPrinter.Sewing = sewing;
  254. misGoldPrinter.IsSewingLine = true; //打印装订线
  255. #endregion
  256. misGoldPrinter.IsSubTotalPerPage = true; //每页加小计
  257. //打印或预览
  258. if (print)
  259. {
  260. misGoldPrinter.Print();
  261. }
  262. else
  263. {
  264. misGoldPrinter.Preview();
  265. }
  266. //释放,如果在当前过程中定义,就在这里释放
  267. //misGoldPrinter.Dispose();
  268. //misGoldPrinter = null;
  269. #endregion 
  270. }
  271. private void frmAllPrint_Load(object sender, System.EventArgs e)
  272. {
  273. this.dataGrid1.DataSource = PrintDataSource.GetDataSource(500);
  274. }
  275. private void frmAllPrint_Closed(object sender, System.EventArgs e)
  276. {
  277. misGoldPrinter.Dispose();
  278. misGoldPrinter = null;
  279. }
  280. }//End Class
  281. }//End Namespace