C#打印服务
转自:http://blog.sina.com.cn/s/blog_4c4597760100097g.html
Winform里集成了几个打印控件:PrintPreviewDialog,PrintDocument,PrintDialog,PageSetupDialog,PrintPreviewControl,看书看资料会把人看晕,实际上打印核心控件只有一个,就是PrintDocument,PrintPreviewDialog也有点用,就是页面预览控件,真正开发中如果需要打印功能,一般会从网上Down现成的控件,如果要自己手动写,费时又费力,本着学习的态度,我们需要知道打印是怎么实现的,写两个比较常用的打印服务,一个是打印DataTable的,另一个是打印TextBox的。
|
//定义全局变量count,储存当前打印的行数 int count=0; //定义一个方法,接收一个DataTable类型参数及PrintDocument的PrintPage事件传入的参数e以方便操作 private void PrintTable(DataTable dt, System.Drawing.Printing.PrintPageEventArgs e) //取得对应的Graphics对象 //获得相关页面X坐标、Y坐标、打印区域宽度、长度 //定义打印字体 //rowCount是除去打印过的行数后剩下的行数 //maxPageRow是当前设置下该页面可以打印的最大行数 //因为是表格,先画一条水平直线 //再画出表格各列的列标题 //画完标题,再画一条直线 //判断,如果剩下的行数小于可打印的最大行数,则执行下列代码 //内循环打印Table内行数据 //打印每个单元格内的数据 //打印完一行后,继续打印一条直线 //所有数据打印完毕后,打印垂直直线 for (int i = 0; i <= dt.Columns.Count; i++) //判断,如果剩下的行数大于可打印的最大行数,则执行下列代码 //与上面类似,注意下面while的条件 //打印每个单元格 //打印水平直线 //打印垂直直线 } //指定HasMorePages值,如果页面最大行数小于剩下的行数,则返回true(还有),否则返回false |
|
//设置全局变量保存截取字符串位置 int sub=0; private void printText(string text, System.Drawing.Printing.PrintPageEventArgs e) //获得相关点坐标、长度、宽度 //设置字体 //这个方法后面讲 g.MeasureString(text.Substring(sub), font, new SizeF(width, height-10), new StringFormat(), out charnum, out line); //打印string //设置截取位置 //设置HasMorePage属性 sub=0; |
|
//打印预览 private void button2_Click(object sender, EventArgs e) //注意指定其Document属性 //打印 private void button1_Click(object sender, EventArgs e) //同样注意指定Document属性 //触发PrintDocument的PrintPage事件 |

浙公网安备 33010602011771号