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、最后执行创建文档和打印操作。

DevExpress打印相关代码 using System; using System.Windows.Forms; using DevExpress.XtraPrinting; using System.Xml.Serialization; namespace MyDevExpressDemo { /// /// PrintSettingController 的摘要说明。 /// public class PrintSettingController { PrintingSystem ps = null; string formName=null; DevExpress.XtraPrinting.PrintableComponentLink link=null; /// /// /// /// 要打印的部件 /// 此部件对应的布局信息 public PrintSettingController(IPrintable control,string FormName) { formName=FormName; ps=new DevExpress.XtraPrinting.PrintingSystem(); link=new DevExpress.XtraPrinting.PrintableComponentLink(ps); ps.Links.Add(link); link.Component=control; ps.PageSettingsChanged-=new EventHandler(ps_PageSettingsChanged); LoadPageSetting(); ps.PageSettingsChanged+=new EventHandler(ps_PageSettingsChanged); ps.AfterMarginsChange+=new MarginsChangeEventHandler(ps_AfterMarginsChange); } public void Preview() { try { if(DevExpress.XtraPrinting.PrintHelper.IsPrintingAvailable) { Cursor.Current=Cursors.AppStarting; if(_PrintHeader!=null) { PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter; phf.Header.Content.Clear(); phf.Header.Content.AddRange(new string[] {"",_PrintHeader,""}); phf.Header.Font=new System.Drawing.Font("宋体",14,System.Drawing.FontStyle.Bold); phf.Header.LineAlignment=BrickAlignment.Center; } link.PaperKind=ps.PageSettings.PaperKind; link.Margins=ps.PageSettings.Margins; link.Landscape=ps.PageSettings.Landscape; link.CreateDocument(); ps.PreviewForm.Show(); } else { Cursor.Current=Cursors.Default; MessageBox.Show("打印机不可用", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } finally { Cursor.Current=Cursors.Default; } } /// /// 打印控制器 /// /// 要打印的部件 public PrintSettingController(IPrintable control) { if(control==null)return; Control c=(Control)control; formName=c.FindForm().GetType().FullName+"."+c.Name; ps=new DevExpress.XtraPrinting.PrintingSystem(); link=new DevExpress.XtraPrinting.PrintableComponentLink(ps); ps.Links.Add(link); link.Component=control; ps.PageSettingsChanged-=new EventHandler(ps_PageSettingsChanged); LoadPageSetting(); ps.PageSettingsChanged+=new EventHandler(ps_PageSettingsChanged); ps.AfterMarginsChange+=new MarginsChangeEventHandler(ps_AfterMarginsChange); } public void ExportToHtml() { try { using(SaveFileDialog fd=new SaveFileDialog()) { fd.Title="导出HTML文件"; fd.RestoreDirectory=true; fd.Filter="HTML文件|*.htm"; fd.FilterIndex=1; if(fd.ShowDialog()==DialogResult.OK) { // if(obj is DevExpress.XtraGrid.GridControl) // { // ((DevExpress.XtraGrid.GridControl)obj).ExportToHtml(fd.FileName); // MessageBox.Show("文件导出成功","导出",MessageBoxButtons.OK,MessageBoxIcon.Information); // } // else if(obj is DevExpress.XtraTreeList.TreeList) // { link.CreateDocument(); ps.ExportToHtml(fd.FileName); MessageBox.Show("文件导出成功","导出",MessageBoxButtons.OK,MessageBoxIcon.Information); // } } } } finally { } } /// /// 网格分组时要导出,请使用这个, /// public void GridGroupToExcel() { DevExpress.XtraGrid.GridControl grid=this.link.Component as DevExpress.XtraGrid.GridControl; if(grid!=null) { using(SaveFileDialog fd=new SaveFileDialog()) { fd.Title="导出Excel文件"; fd.RestoreDirectory=true; fd.Filter="Excel文件|*.xls"; fd.FilterIndex=1; if(fd.ShowDialog()==DialogResult.OK) { grid.ExportToExcel(fd.FileName); MessageBox.Show("文件导出成功","导出",MessageBoxButtons.OK,MessageBoxIcon.Information); } } } } public void ExportToExcel() { try { using(SaveFileDialog fd=new SaveFileDialog()) { fd.Title="导出Excel文件"; fd.RestoreDirectory=true; fd.Filter="Excel文件|*.xls"; fd.FilterIndex=1; if(fd.ShowDialog()==DialogResult.OK) { // if(obj is DevExpress.XtraGrid.GridControl) // { // ((DevExpress.XtraGrid.GridControl)obj).ExportToExcel(fd.FileName); // MessageBox.Show("文件导出成功","导出",MessageBoxButtons.OK,MessageBoxIcon.Information); // } // else if(obj is DevExpress.XtraTreeList.TreeList) // { link.CreateDocument(); ps.ExportToXls(fd.FileName); MessageBox.Show("文件导出成功","导出",MessageBoxButtons.OK,MessageBoxIcon.Information); // } } } } finally { } } string _PrintHeader=null; /// /// 打印时的标题 /// public string PrintHeader { set { _PrintHeader=value; } } /// /// 进行打印 /// public void Print() { try { if(DevExpress.XtraPrinting.PrintHelper.IsPrintingAvailable) { if(_PrintHeader!=null) { PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter; phf.Header.Content.Clear(); phf.Header.Content.AddRange(new string[] {"",_PrintHeader,""}); phf.Header.Font=new System.Drawing.Font("宋体",14,System.Drawing.FontStyle.Bold); phf.Header.LineAlignment=BrickAlignment.Center; } link.PaperKind=ps.PageSettings.PaperKind; link.Margins=ps.PageSettings.Margins; link.Landscape=ps.PageSettings.Landscape; link.CreateDocument(); link.CreateDocument(); ps.Print(); } else { Cursor.Current=Cursors.Default; MessageBox.Show("打印机不可用", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } finally { } } private void ps_AfterMarginsChange(object sender, MarginsChangeEventArgs e) { SavePageSetting(); } private void ps_PageSettingsChanged(object sender, EventArgs e) { SavePageSetting(); } //获取页面设置信息 void LoadPageSetting() { try { string path=System.Windows.Forms.Application.StartupPath+"\\PrintLayout"; if(!System.IO.Directory.Exists(path)) { return; } path+="\\"+formName+".xml"; if(!System.IO.File.Exists(path)) { return; } XmlSerializer ser=new XmlSerializer(typeof(UserPageSetting)); UserPageSetting setting=(UserPageSetting)ser.Deserialize(new System.IO.FileStream(path,System.IO.FileMode.Open,System.IO.FileAccess.Read,System.IO.FileShare.ReadWrite)); System.Drawing.Printing.Margins m=new System.Drawing.Printing.Margins(setting.Left,setting.Right,setting.Top,setting.Bottom); ps.PageSettings.Assign(m,(System.Drawing.Printing.PaperKind)setting.PaperKind,setting.Landscape); } catch{} } /// /// 保存当前网格的布局 /// void SavePageSetting() { try { string path=System.Windows.Forms.Application.StartupPath+"\\PrintLayout"; if(!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } path+="\\"+formName+".xml"; DevExpress.XtraPrinting.XtraPageSettings setting= ps.PageSettings; UserPageSetting s=new UserPageSetting(); s.Landscape=setting.Landscape; s.Left=setting.Margins.Left; s.Right=setting.Margins.Right; s.Top=setting.Margins.Top; s.Bottom=setting.Margins.Bottom; s.PaperKind=(int)setting.PaperKind; XmlSerializer ser=new XmlSerializer(s.GetType()); ser.Serialize(new System.IO.FileStream(path,System.IO.FileMode.Create,System.IO.FileAccess.Write,System.IO.FileShare.ReadWrite),s); } catch{} } } /// /// 最终用户对某个打印页的设置 /// [Serializable()] public class UserPageSetting { public UserPageSetting() { } public bool Landscape; public int PaperKind; public int Top; public int Bottom; public int Left; public int Right; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值