给大家分享一个挺好用的打印控件。dll等下上传到资源里边。
新手可以看看
12-13补充
这个dll里边有好几个打印控件,刚知道。
有一个比这更更好用的,我把代码放到最后
- private void tabControl1_Click(object sender, EventArgs e)
- {
- if (tab.SelectedTab.Text == "打印预览")
- {
- myp.PageUnits = VBprinter.VB2008Print.PageExportUnit.CentiMeter;
- myp.IsImmediatePrintNotPreview = false;
- myp.IsUseDGVPadding = false;
- myp.CellMargin = new System.Drawing.Printing.Margins(10, 20, 10, 10);
- myp.InvalidatePreview();
- tab.SelectedIndex = 1;
- }
- }
- //打印预览
- private void myp_PrintDocument()
- {
- DataGridView newdgv = new DataGridView();
- myp.CopyDataGridView(dgvsource, newdgv, false);
- newdgv.GridColor = Color.Black;
- //打印处理过程
- myp.IsNeedCheckNewPage = false;
- System.Drawing.Printing.Margins mymargin;
- mymargin = new System.Drawing.Printing.Margins();
- mymargin.Left = Convert.ToInt32(myp.ConvertInchToCm(45));
- mymargin.Right = Convert.ToInt32(myp.ConvertInchToCm(45));
- mymargin.Top = Convert.ToInt32(myp.ConvertInchToCm(80));
- mymargin.Bottom = Convert.ToInt32(myp.ConvertInchToCm(45));
- myp.NewPage(System.Drawing.Printing.PaperKind.A4, mymargin, false);
- mymargin.Top = 20;
- //先打印表头内容
- Font f1 = new Font("黑体", 18, FontStyle.Bold);
- Font f2 = new Font("黑体", 14, FontStyle.Bold);
- Font f3 = new Font("宋体", 12);
- Font f4 = new Font("华文行楷", 12);
- string ss;
- ss = "自来水公司\n欠费查询表";
- myp.DrawTitle(ss, f1, Color.Black, 0);
- myp.NewRow(60);
- float rowheight;
- rowheight = 70;
- //float mywidth;
- myp.NewRow(rowheight);
- ss = "制表时间:" + System.String.Format("{0:f}", System.DateTime.Now);
- myp.DrawText(ss, myp.PaperPrintWidth, rowheight, f4, StringAlignment.Far, StringAlignment.Center, false, true, false, false, 6, 0);
- myp.NewRow(rowheight);
- //正式开始打印表格
- rowheight = 60;//表格要打印的行高
- bool needprintheader = true;
- for (int i = 0; i < dgvsource.RowCount; i++)
- {
- if (needprintheader == true)
- {
- //打印表格头
- if (i != 0)
- {
- //不是第一页,需要打印标题行
- ss = "自来水公司\n欠费查询表";
- myp.DrawTitle(ss, f1, Color.Black, 0);
- ss = "" + "\n" + "\n";
- myp.DrawTitle(ss, f2, Color.Black, 0);
- myp.Currenty = myp.Currenty + 30;//留一点空白
- }
- //再打印表格列标题 行
- myp.DrawDGVHeader(newdgv, rowheight, true, true, "1111", 6);
- needprintheader = false;
- }
- if (myp.IsNewPage(rowheight) == true)
- {
- //需要换页
- myp.NewPage(System.Drawing.Printing.PaperKind.A4, mymargin, false);
- needprintheader = true;
- i = i - 1;
- }
- else
- {
- //打印当前行
- myp.DrawDGVRow(newdgv, i, rowheight, true, false, "1111", 6);
- }
- }
- //以下开始打印表尾
- float footerheight = 700;//表尾要打印的高度,下面打印的内容不能超过这个高度
- if (myp.IsNewPage(footerheight) == true)
- {
- //说明表尾要不能全部打印下去,先换页
- myp.NewPage(System.Drawing.Printing.PaperKind.A4, mymargin, false);
- }
- newdgv.Dispose();
- newdgv = null;
- }
- public List<string> columns(DataGridView dgv)
- {
- string columnsname = "";
- string columns = "";
- List<string> columnlist = new List<string>();
- for (int i = 0; i < dgv.Columns.Count; i++)
- {
- //Type type = dt.Columns[i].DataType;
- columns = dgv.Columns[i].HeaderCell.Value.ToString();
- //columnsname = dgv.Columns[i].HeaderCell.Value.GetType().ToString();
- columnsname = dgv.Columns[i].ValueType.ToString();
- if (columnsname != "System.String")
- {
- //columns = dgv.Columns[i].ToString(); ;
- columns = dgv.Columns[i].HeaderCell.Value.ToString();
- if (columnsname == "System.DateTime")
- {
- continue;
- }
- if (columnsname != "System.String")
- {
- columns = dgv.Columns[i].HeaderCell.Value.ToString();
- columnlist.Add(columns);
- }
- }
- }
- return columnlist;
- }
- VBprinter.DGVprint dgvprint4 = new VBprinter.DGVprint();
- private void button6_Click(object sender, EventArgs e)
- {
- dgvprint4.MainTitle = treeView1.Nodes[0].Text + "\n" + "用户档案修改报表";
- //dgvprint4.MainTitle = "";//分组打印测试(3.5版新功能)按联系人姓名分组汇总邮政编码列,每组连续打印,且添加行号,行号每组从1开始重新编号
- dgvprint4.SubTitle = textBox1.Text;//"您还可以改为分栏打印或跨页打印工资条打印试试,怎么样,本功能够强大吧";
- dgvprint4.Alignment = StringAlignment.Center;//'表格居中
- dgvprint4.PrintType = VBprinter.DGVprint.mytype.MulPagesPrint; //'普通表格VBprinter.DGVprint.mytype.GeneralPrint;
- //dgvprint4.TableFooterLeft = "表格页脚内容(左边)";
- //dgvprint4.TableFooterMiddle = "表格脚眉内容(中边)";
- //dgvprint4.TableFooterRight = "表格页脚内容(右边)";
- //dgvprint4.SortColumn = "用水量";// '只能有一列(注意,此处是列的名称而不是显示的名称)
- //dgvprint4.GroupColumn = "用水量";// '只能有一列(注意,此处是列的名称而不是显示的名称)
- // s[0] = "户数"; s[1] = "计费水量"; s[2] = "上期滞纳金"; s[3] = "应收水费"; s[4] = "实用数"; s[5] = "应收费用"; s[6] = "其它费用"; s[7] = "合计"; s[8] = "水损";
- List<string> list = columns(dgvsource);
- string sumcolumns = "";
- foreach (string item in list)
- {
- sumcolumns += item + ";";
- }
- dgvprint4.SumColumns = sumcolumns;// '如果要汇总多列的话,可用英文的分号连接起来(注意,此处是列的名称而不是显示的名称)
- dgvprint4.GroupNewPage = false;// '每组连续打印
- dgvprint4.IsAddRowID = true;// '添加行号
- dgvprint4.IsGroupNewRowID = true; //'新组行号从1开始重新编号
- dgvprint4.PaperLandscape = false; //'纵向打印
- dgvprint4.Print(dgvsource, true);// '也可用dgvprint1.print(d1,true),此时会显示一个打印参数设置窗口
- }