完美演绎DevExpress XtraPrinting Library 的打印功能
设计报告不仅费时间,而且还乏味!但是,终端用户信赖打印的报告,同时大多数的应用也需要它们。因此,如何发挥你UI的功能并让你的用户把它呈递到纸上又会怎样呢?毋庸置疑,XtraPrinting Library肯定是你的最佳选择。XtraPrinting Library 是100%的C#数据呈递和可视化系统。用于特殊的Visual Studio .NET且将你的用户接口与打印页面相连接。一旦你开始使用XtraPrinting Library,你就能方便的打印高级可视控件中的内容,正如XtraGrid和XtraTreeList一样简单。可以使你在不需要传统的报告编辑器的情况下能为你的终端用户提供无限制的报告。
那么,如何完美演绎XtraPrinting Library的打印功能呢? 在DEV控件包使用方面有多年研究的慧都控件网愿把使用XtraPrinting Library的经验与大家共分享。
首先要实现打印功能必须添加一个引用:DevExpress.XtraPrint。
实现打印需要用到的主要的类:
1. public class PrintingSystem : Component, ISupportInitialize,IPrintingSystem,IAccessible,IExporter,IPrintingSystemContext
该类负责提供生成报表的一些方法,还提供了对页面进行设置和打印报表的一些函数,这个类的属性包含了访问其他管理报表的对象,如Document类,BrickGraphics类(在报表上进行画图的类),XtraPageSettings类(提供对打印页面进行设置的操作)
2. public class PrintableComponentLink : Link
该类的功能是对实现DevExpress.XtraPrinting.IPrintable接口的所有控件进行打印,它提供了一些基本的生成和打印报表的功能。在生成报表以后可以通过PrintingSystem将报表打印出来。
通过以上这两个类就能完全实现各种控件打印了,只要一个控件实现了DevExpress.XtraPrinting.IPrintable这个接口就能够对该控件打印,如GridControl,CharControl等等,下面给出具体的实现方法:
public class PrintSettingController
{
PrintingSystem ps = null;
string formName = null;
PrintableComponentLink link = null;
string _PrintHeader = null;
/// <summary>
/// 打印时的标题
/// </summary>
public string PrintHeader
{
set
{
_PrintHeader = value;
}
}
string _PrintFooter = null;
/// <summary>
/// 打印时页脚
/// </summary>
public string PrintFooter
{
set
{
_PrintFooter = value;
}
}
bool _landScape;
/// <summary>
/// 页面横纵向
/// </summary>
public bool LandScape
{
set { _landScape = value; }
}
System.Drawing.Printing.PaperKind _paperKind;
/// <summary>
/// 纸型
/// </summary>
public System.Drawing.Printing.PaperKind PaperKind
{
set { _paperKind = value; }
}
/// <summary>
/// 打印控制器
/// </summary>
/// <param name="control">要打印的部件</param>
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;
}
/// <summary>
/// 打印预览
/// </summary>
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;
//设置页脚
phf.Footer.Content.Clear();
phf.Footer.Content.AddRange(new string[] { "", "", _PrintFooter });
phf.Footer.Font = new System.Drawing.Font("宋体", 9, System.Drawing.FontStyle.Regular);
phf.Footer.LineAlignment = BrickAlignment.Center;
}
link.PaperKind = ps.PageSettings.PaperKind ;
link.Margins = ps.PageSettings.Margins;
link.Landscape = ps.PageSettings.Landscape;
link.CreateDocument();
//汉化
DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new Dxperience.LocalizationCHS.DxperienceXtraPrintingLocalizationCHS();
ps.PreviewFormEx.Show();
}
else
{
Cursor.Current = Cursors.Default;
MessageBox.Show("打印机不可用 ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
finally
{
Cursor.Current = Cursors.Default;
}
}
/// <summary>
/// 打印
/// </summary>
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;
//设置页脚
phf.Footer.Content.Clear();
phf.Footer.Content.AddRange(new string[] { "", "", _PrintFooter });
phf.Footer.Font = new System.Drawing.Font("宋体", 9, System.Drawing.FontStyle.Regular);
phf.Footer.LineAlignment = BrickAlignment.Center;
}
link.PaperKind = ps.PageSettings.PaperKind;
link.Margins = ps.PageSettings.Margins;
link.Landscape = ps.PageSettings.Landscape;
link.CreateDocument();
link.CreateDocument();
//汉化
DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new Dxperience.LocalizationCHS.DxperienceXtraPrintingLocalizationCHS();
ps.Print();
}
else
{
Cursor.Current = Cursors.Default;
MessageBox.Show("打印机不可用 ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
finally
{
}
}
//获取页面设置信息
public void LoadPageSetting()
{
System.Drawing.Printing.Margins margins = new System.Drawing.Printing.Margins(60, 60, 60, 60);
ps.PageSettings.Assign(margins, _paperKind, _landScape);
}
}
客户端如何使用:实例化PrintSettingController,进行参数设置,包括页眉页脚横纵向纸型,当然所有这些设置信息也可以在PrintSettingControll类里进行设置了,我这里是需求的需要,所以加在了外面,PrintSystem.PageSettings属性是XtraPageSettings类型,XtraPageSettings类封装了所有的页面设置信息,你可以在LoadPageSetting()函数里面进行修改,来实现自己想要的功能,例如可以把设置信息保存成XML文件
PrintSettingController psc = new PrintSettingController(this.gridControl1);
//页眉
psc.PrintHeader = this.Text;
//页脚
psc.PrintFooter = this.dateTimePicker1.Text.ToString();
//横纵向
psc.LandScape = this.rbtnHorizon.Checked;
//纸型
psc.PaperKind = System.Drawing.Printing.PaperKind.A4;
//加载页面设置信息
psc.LoadPageSetting();
psc.Preview();
另外该类实现了对打印预览对话框的汉化功能,添加了一个引用DXChinese.dll,然后在程序中加入了以下代码即可实现汉化:
DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new Dxperience.LocalizationCHS.DxperienceXtraPrintingLocalizationCHS();]
应广大客户的强烈要求,慧都为DevExpress for .NET用户量身打造了一款中文资源包,DevExpress 官方汉化资源 , 您只需极少花费便可获得这套完整、专业的汉化资源,从而使您的产品实现全面汉化。
慧都DevExpress高级培训大幕开启! 本次培训,旨在让您深入了解DevExpress控件的各项功能,帮您快速掌握产品使用方法、应用技巧、关键代码及常见问题处理技巧,同时我们将结合产品应用案例,DevExpress高级培训为您进行深入的行业分析,使您在整个项目开发中游刃有余。
完美演绎DevExpress XtraPrinting Library 的打印功能的更多相关文章
- DevExpress打印功能 z
一.打印功能说明: 打印功能,我们有多种实现方式,可以根据需要自行选择,我简单的总结下两种方法. (1).使用微软.net框架自带的PrintDocument,这种方式是直接借助Graphics,自行 ...
- DevExpress打印功能介绍 z
一.打印功能说明: 打印功能,我们有多种实现方式,可以根据需要自行选择,我简单的总结下两种方法. (1).使用微软.net框架自带的PrintDocument,这种方式是直接借助Graphics,自行 ...
- NET快速信息化系统开发框架 V3.2 -> “用户管理”主界面使用多表头展示、增加打印功能
RDIFrameowrk.NET 用户管理是使用非常频繁的模块,由于需要展示的字段比较多,以前的展示方式显得不是太规范,现3.2版本用户管理主界面进行了全新的设计,数据列表展示使用了Dev家族全新的G ...
- jQuery:实现网页的打印功能
实现的打印功能大致跟浏览器的 Ctrl+P 效果一样 一.直接上代码 <!DOCTYPE html> <head> <meta charset="utf-8&q ...
- C#程序调用CodeSoft预先设计好的标签模块实现打印功能
if (this.tbSetLabel.Text.Trim() == "") { MessageBox.Show("请先 Enter 选择标签模板文件!", & ...
- web页面实现指定区域打印功能
web页面实现指定区域打印功能 使用CSS,定义一个.noprint的class,将不打印的内容放入这个class内. 详细如下: <style media=print type="t ...
- vc 实现打印功能
Visual C++6.0是开发Windows应用程序的强大工具,但是要通过它实现程序的打印功能,一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提供的框架内实现这 ...
- 开源的javascript实现页面打印功能,兼容所有的浏览器(情况属实)
这篇文章完全是属于技术文章,也是记录一下自己在项目当中遇到的坑爹问题啊,因为是B/S的程序,所以打印功能还是必须要有的,对于打印我选择了一个js插件,发现非常的简单和方便,所以这里拿出来和大家分享一下 ...
- IE下实现打印功能
先贴代码: <html> <head> <style type="text/css"> *{margin:0px;padding:0px;} . ...
随机推荐
- 解析ABP框架中的事务处理和工作单元,ABP事务处理
通用连接和事务管理方法连接和事务管理是使用数据库的应用程序最重要的概念之一.当你开启一个数据库连接,什么时候开始事务,如何释放连接...诸如此类的. 正如大家都知道的,.Net使用连接池(connec ...
- PL/SQL远程备份和恢复Oracle数据库
(转自:http://blog.csdn.net/huchunfu/article/details/25165901) 在客户端远程备份的文件保存在数据库所在主机上,不会直接拷贝到客户端.—————— ...
- SQL Server 2000 :选择许可模式及更改
在SQL Server企业版中,有一个许可模式概念,有两种许可模式:“处理器许可证”和“每客户”模式.“处理器许可证”模式表示允许几个CPU运行SQL Server,“每客户”决定的是客户端连接数. ...
- C#调用SQL Server分页存储过程
以SQL Server2012提供的offset ..rows fetch next ..rows only为例 e.g. 表名:Tab1 ------------------------------ ...
- Java设计模式学习笔记(单例模式)
最近一直在看<Head First设计模式>,这本书写的确实是很不错的,专注于怎么用最简单的方式最通俗的语言让人了解设计模式.据说GoF的设计模式那本书写的很好,是一本经典,但是就是难懂, ...
- LNMP+zabbix分布式监控搭建及版本升级
LNMP+zabbix分布式监控搭建需要组件:gcc gcc-c++ openssl* pcre pcre-devel gd gd-devel libjpeg-devel libpng-devel l ...
- 十、Android学习第九天——小结(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十.Android学习第九天——小结 通过这段时间的学习,今晚上来做个小小 ...
- 参加 Tokyo Westerns / MMA CTF 2nd 2016 经验与感悟 TWCTF 2016 WriteUp
洒家近期参加了 Tokyo Westerns / MMA CTF 2nd 2016(TWCTF) 比赛,不得不说国际赛的玩法比国内赛更有玩头,有的题给洒家一种一看就知道怎么做,但是做出来还需要洒家拍一 ...
- 日常使用 Git 的 19 个建议[转]
我使用Git已经有4年之久,在这里想分享一些实用的小技巧,希望能对大家有所帮助. 如果你对git一无所知,那么我建议先去读一下Git 常用命令速查.本篇文章主要适合有一定 git 使用基础的人群. 目 ...
- KVM 介绍(8):使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 [Nova Libvirt QEMU/KVM Live Migration]
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...