原創|其它|編輯:郝浩|2010-05-14 11:52:48.000|閱讀 7288 次
概述:設計報告不僅費時間,而且還乏味!但是,終端用戶信賴打印的報告,同時大多數的應用也需要它們。因此,如何發揮你UI的功能并讓你的用戶把它呈遞到紙上又會怎樣呢?毋庸置疑,XtraPrinting Library肯定是你的最佳選擇。在DEV控件包使用方面有多年研究的慧都控件網愿把使用XtraPrinting Library的經驗與大家共分享。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
設計報告不僅費時間,而且還乏味!但是,終端用戶信賴打印的報告,同時大多數的應用也需要它們。因此,如何發揮你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高級培訓為您進行深入的行業分析,使您在整個項目開發中游刃有余。
(慧都控件網版權所有,轉載請注明出處,否則追究法律責任)
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉載自:慧都控件網