zoukankan      html  css  js  c++  java
  • DevExpress打印功能介绍 z

    一、打印功能说明:

    打印功能,我们有多种实现方式,可以根据需要自行选择,我简单的总结下两种方法。

    (1)、使用微软.net框架自带的PrintDocument,这种方式是直接借助Graphics,自行调整位置和行间距等,一行行一页页绘画打印页面,虽然可控制性强,但是操作比较麻烦,而且细节和页面美化上,实现更是繁琐复杂。

    (2)、使用DevExpress框架,这里面也有很多种打印方法,这段时间我主要使用的是GridControll+PrintingSystem方法来实现打印,总结了以下,希望能对其他人有些帮助。

     

    二、打印功能详细说明:
    (1)、DevExpress中有很多控件已经自身实现了打 印接口( IPrintable, IBasePrintable等),即:此组件为了方便,提前对很多控件实现了打印功能。例如:GridControl,这个控件是我们用到的最多的数据 表格控件,常用来进行数据绑定和显示,操作和显示性都很好,对打印功能来说,基本能满足一般要求,但是需要对打印的文档进行详细细节的操作,可能无法满 足,所以加上PrintingSystem,打印控制便会更灵活。

    (2)、详细代码实现:
       public void Printing()
            {
               
                //相当于打印操作的控制器,起控制作用
                PrintingSystem print = new PrintingSystem();
                //相当于打印操作的实践者,真正完成打印功能操作
                DevExpress.XtraPrinting.PrintableComponentLink link = null;
                link = new DevExpress.XtraPrinting.PrintableComponentLink(print);
                //借助GridControl控件提供打印格式和内容(根据需要提供)
                link.Component = gridControlPrint;
                //设置页眉和页脚
                PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter;
                //设置页脚位置
                phf.Footer.LineAlignment = BrickAlignment.Center;
                phf.Header.Content.Clear();
                //设置页眉内容
                string headText = "页眉内容信息";
                phf.Header.Content.Add(headText);
                //设置页眉字体
                phf.Header.Font = new System.Drawing.Font("宋体", 12, System.Drawing.FontStyle.Regular);
                //设置页眉内容位置
                phf.Header.LineAlignment = BrickAlignment.Far;
                print.Links.Add(link);
                //设置内容页页脚信息(一般为页码信息)
                link.CreateMarginalFooterArea += new CreateAreaEventHandler(link_CreateMarginalFooterArea);
                //设置内容页页眉信息(一般为页标题信息)
                link.CreateMarginalHeaderArea += new CreateAreaEventHandler(link_CreateMarginalHeaderArea);
                //创建打印文档,此步完成文档的绘画生成
                link.CreateDocument(print);
                //设置文档的名称,即:输出的打印文件的名称。
                print.Document.Name = _docName;
                //设置是否显示打印提示框,即:打印了几页,当前是第几页等···
                print.ShowPrintStatusDialog = false;
                //开始调用打印驱动设备,进行打印!
                print.Print();
            }

     

         void link_CreateMarginalHeaderArea(object sender, CreateAreaEventArgs e)
            {
              
                //页信息块,可以设置页相关信息,一般设置:打印的页码信息
                //PageInfoBrick vPageInfoBrick1 =e.Graph.DrawPageInfo(PageInfo.NumberOfTotal, "第{0}页,共{1}页", Color.Black,
                //   new RectangleF(0, 0, 100, 21), BorderSide.None);
                //vPageInfoBrick1.LineAlignment = BrickAlignment.Center;
                //vPageInfoBrick1.Alignment = BrickAlignment.Center;
                //vPageInfoBrick1.AutoWidth = true;
                //vPageInfoBrick1.Font = new System.Drawing.Font("宋体", 16, FontStyle.Bold);
               
                //纯文本信息块,设置一些文字性说明信息,一般设置:简单的说明信息
                TextBrick text = e.Graph.DrawString("纯文字信息块", Color.Black, new RectangleF(10, 10, 100, 40), BorderSide.None);

              
            }

            void link_CreateMarginalFooterArea(object sender, CreateAreaEventArgs e)
            {
                PageInfoBrick vPageInfoBrick1 = e.Graph.DrawPageInfo(PageInfo.NumberOfTotal, "第{0}页,共{1}页", Color.Black,
                   new RectangleF(0, 0, 100, 21), BorderSide.None);
                vPageInfoBrick1.LineAlignment = BrickAlignment.Center;
                vPageInfoBrick1.Alignment = BrickAlignment.Center;
                vPageInfoBrick1.AutoWidth = true;
                vPageInfoBrick1.Font = new System.Drawing.Font("宋体", 11f, FontStyle.Bold);
               
            }

    说明:1、完成数据填装,为gridControlPrint填装数据表格和数据。

            2、创建PrintingSystem打印控制器和PrintableComponentLink打印功能块,为PrintableComponentLink指定打印关联容器gridControlPrint

            3、在PrintableComponentLink添加文档页眉和页脚处理事件,进行相应的自定义的动态调整。

            4、最后执行创建文档和打印操作。

  • 相关阅读:
    【ecshop】 完全清除版权信息
    【ecshop】使用sql 清除测试数据
    Java异常处理:给程序罩一层保险
    想清楚你究竟想成为什么样的人了吗?
    Java集合类的那点通俗的认知
    2019年的第一天,我给自己定了一份读书计划
    Java的内部类真的那么难以理解?
    29岁了还一事无成是人生的常态?
    Java接口的实例应用:致敬我的偶像——何塞·穆里尼奥
    程序员年底众生相
  • 原文地址:https://www.cnblogs.com/zeroone/p/4311112.html
Copyright © 2011-2022 走看看