由于项目中需要将ChartControl中的图表打印出来,自带的只有个预览方法ShowPrintPreview(),经过资料查找,并对DevExpress打印进行了一些整理,现把具体思路贴供大家参考。
实现打印需要用到的主要类有PrintingSystem、XtraPageSettings、PrintableComponentLink 。
1、PrintingSystem类
该类负责提供生成报表的一些方法,还提供了对页面进行设置和打印报表的一些函数,这个类的属性包含了访问其他管理报表的对象,如Document类,BrickGraphics类(在报表上进行画图的类)。
2、XtraPageSettings类(提供对打印页面进行设置的操作)
3、PrintableComponentLink类
该类对实现DevExpress.XtraPrinting.IPrintable接口的所有控件进行打印,它提供了一些基本的生成和打印报表的功能。在生成报表以后可以通过PrintingSystem将报表打印出来。
4、代码实现:
打印类代码
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows.Forms;
6 using DevExpress.XtraPrinting;
7
8 namespace Teleware.GeologicDisaster.ForecastApp
9 {
10 public class PrintClass
11 {
12 #region 私有字段
13
14 private PrintingSystem ps = null;
15 private string formName = null;
16 private PrintableComponentLink link = null;
17
18 #endregion
19
20 #region 属性
21 string _PrintHeader = null; // 设置打印时的标题
22 private string _PrintFooter = null; // 设置打印时页脚显示内容
23 private bool _landScape; // 设置页面横纵向
24 private System.Drawing.Printing.PaperKind _paperKind; // 设置纸张类型(A1、A2、A3、A4)
25
26 /// <summary>
27 /// 设置打印时的标题
28 /// </summary>
29 public string PrintHeader
30 {
31 set
32 {
33 _PrintHeader = value;
34 }
35 }
36
37 /// <summary>
38 /// 设置打印时页脚显示内容
39 /// </summary>
40 public string PrintFooter
41 {
42 set
43 {
44 _PrintFooter = value;
45 }
46 }
47
48 /// <summary>
49 /// 设置页面横纵向
50 /// </summary>
51 public bool LandScape
52 {
53 set { _landScape = value; }
54 }
55
56 /// <summary>
57 /// 设置纸张类型(A1、A2、A3、A4)
58 /// </summary>
59 public System.Drawing.Printing.PaperKind PaperKind
60 {
61 set { _paperKind = value; }
62 }
63 #endregion
64
65 #region 构造函数
66 /// <summary>
67 /// 打印控制器
68 /// </summary>
69 /// <param name="control">要打印的部件</param>
70 public PrintClass(IPrintable control)
71 {
72 if (control == null)
73 {
74 return;
75 }
76 Control c = (Control)control;
77 formName = c.FindForm().GetType().FullName + "." + c.Name;
78 ps = new DevExpress.XtraPrinting.PrintingSystem();
79 link = new DevExpress.XtraPrinting.PrintableComponentLink(ps);
80 ps.Links.Add(link);
81 link.Component = control;
82 }
83 #endregion
84
85 #region 打印预览
86 /// <summary>
87 /// 打印预览
88 /// </summary>
89 public void Preview()
90 {
91 try
92 {
93 if (DevExpress.XtraPrinting.PrintHelper.IsPrintingAvailable)
94 {
95 Cursor.Current = Cursors.AppStarting;
96 if (_PrintHeader != null)
97 {
98 PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter;
99
100 //设置页眉
101 phf.Header.Content.Clear();
102 phf.Header.Content.AddRange(new string[] { "", _PrintHeader, "" });
103 phf.Header.Font = new System.Drawing.Font("宋体", 14, System.Drawing.FontStyle.Bold);
104 phf.Header.LineAlignment = BrickAlignment.Center;
105
106 //设置页脚
107 phf.Footer.Content.Clear();
108 phf.Footer.Content.AddRange(new string[] { "", "", _PrintFooter });
109 phf.Footer.Font = new System.Drawing.Font("宋体", 9, System.Drawing.FontStyle.Regular);
110 phf.Footer.LineAlignment = BrickAlignment.Center;
111
112 }
113 link.PaperKind = ps.PageSettings.PaperKind;
114 link.Margins = ps.PageSettings.Margins;
115 link.Landscape = ps.PageSettings.Landscape;
116 link.CreateDocument();
117
118 //汉化
119 //DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new Dxperience.LocalizationCHS.DxperienceXtraPrintingLocalizationCHS();
120 ps.PreviewFormEx.Show();
121
122 }
123 else
124 {
125 Cursor.Current = Cursors.Default;
126 MessageBox.Show("打印机不可用 ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
127 }
128 }
129 finally
130 {
131 Cursor.Current = Cursors.Default;
132 }
133 }
134 #endregion
135
136 #region 打印
137
138 /// <summary>
139 /// 打印
140 /// </summary>
141 public void Print()
142 {
143 try
144 {
145 if (DevExpress.XtraPrinting.PrintHelper.IsPrintingAvailable)
146 {
147 if (_PrintHeader != null)
148 {
149 PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter;
150
151 //设置页眉
152 phf.Header.Content.Clear();
153 phf.Header.Content.AddRange(new string[] { "", _PrintHeader, "" });
154 phf.Header.Font = new System.Drawing.Font("宋体", 14, System.Drawing.FontStyle.Bold);
155 phf.Header.LineAlignment = BrickAlignment.Center;
156
157 //设置页脚
158 phf.Footer.Content.Clear();
159 phf.Footer.Content.AddRange(new string[] { "", "", _PrintFooter });
160 phf.Footer.Font = new System.Drawing.Font("宋体", 9, System.Drawing.FontStyle.Regular);
161 phf.Footer.LineAlignment = BrickAlignment.Center;
162
163 }
164 link.PaperKind = ps.PageSettings.PaperKind;
165 link.Margins = ps.PageSettings.Margins;
166 link.Landscape = ps.PageSettings.Landscape;
167 link.CreateDocument();
168 link.CreateDocument();
169 //汉化
170 // DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new Dxperience.LocalizationCHS.DxperienceXtraPrintingLocalizationCHS();
171 ps.Print();
172 }
173 else
174 {
175 Cursor.Current = Cursors.Default;
176 MessageBox.Show("打印机不可用 ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
177 }
178 }
179 finally
180 {
181 }
182 }
183
184 #endregion
185
186 #region 获取页面设置信息
187
188 /// <summary>
189 /// 获取页面设置信息
190 /// </summary>
191 public void LoadPageSetting()
192 {
193 System.Drawing.Printing.Margins margins = new System.Drawing.Printing.Margins(60, 60, 60, 60);
194 ps.PageSettings.Assign(margins, _paperKind, _landScape);
195 }
196 #endregion
197 }
198 }
199
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows.Forms;
6 using DevExpress.XtraPrinting;
7
8 namespace Teleware.GeologicDisaster.ForecastApp
9 {
10 public class PrintClass
11 {
12 #region 私有字段
13
14 private PrintingSystem ps = null;
15 private string formName = null;
16 private PrintableComponentLink link = null;
17
18 #endregion
19
20 #region 属性
21 string _PrintHeader = null; // 设置打印时的标题
22 private string _PrintFooter = null; // 设置打印时页脚显示内容
23 private bool _landScape; // 设置页面横纵向
24 private System.Drawing.Printing.PaperKind _paperKind; // 设置纸张类型(A1、A2、A3、A4)
25
26 /// <summary>
27 /// 设置打印时的标题
28 /// </summary>
29 public string PrintHeader
30 {
31 set
32 {
33 _PrintHeader = value;
34 }
35 }
36
37 /// <summary>
38 /// 设置打印时页脚显示内容
39 /// </summary>
40 public string PrintFooter
41 {
42 set
43 {
44 _PrintFooter = value;
45 }
46 }
47
48 /// <summary>
49 /// 设置页面横纵向
50 /// </summary>
51 public bool LandScape
52 {
53 set { _landScape = value; }
54 }
55
56 /// <summary>
57 /// 设置纸张类型(A1、A2、A3、A4)
58 /// </summary>
59 public System.Drawing.Printing.PaperKind PaperKind
60 {
61 set { _paperKind = value; }
62 }
63 #endregion
64
65 #region 构造函数
66 /// <summary>
67 /// 打印控制器
68 /// </summary>
69 /// <param name="control">要打印的部件</param>
70 public PrintClass(IPrintable control)
71 {
72 if (control == null)
73 {
74 return;
75 }
76 Control c = (Control)control;
77 formName = c.FindForm().GetType().FullName + "." + c.Name;
78 ps = new DevExpress.XtraPrinting.PrintingSystem();
79 link = new DevExpress.XtraPrinting.PrintableComponentLink(ps);
80 ps.Links.Add(link);
81 link.Component = control;
82 }
83 #endregion
84
85 #region 打印预览
86 /// <summary>
87 /// 打印预览
88 /// </summary>
89 public void Preview()
90 {
91 try
92 {
93 if (DevExpress.XtraPrinting.PrintHelper.IsPrintingAvailable)
94 {
95 Cursor.Current = Cursors.AppStarting;
96 if (_PrintHeader != null)
97 {
98 PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter;
99
100 //设置页眉
101 phf.Header.Content.Clear();
102 phf.Header.Content.AddRange(new string[] { "", _PrintHeader, "" });
103 phf.Header.Font = new System.Drawing.Font("宋体", 14, System.Drawing.FontStyle.Bold);
104 phf.Header.LineAlignment = BrickAlignment.Center;
105
106 //设置页脚
107 phf.Footer.Content.Clear();
108 phf.Footer.Content.AddRange(new string[] { "", "", _PrintFooter });
109 phf.Footer.Font = new System.Drawing.Font("宋体", 9, System.Drawing.FontStyle.Regular);
110 phf.Footer.LineAlignment = BrickAlignment.Center;
111
112 }
113 link.PaperKind = ps.PageSettings.PaperKind;
114 link.Margins = ps.PageSettings.Margins;
115 link.Landscape = ps.PageSettings.Landscape;
116 link.CreateDocument();
117
118 //汉化
119 //DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new Dxperience.LocalizationCHS.DxperienceXtraPrintingLocalizationCHS();
120 ps.PreviewFormEx.Show();
121
122 }
123 else
124 {
125 Cursor.Current = Cursors.Default;
126 MessageBox.Show("打印机不可用 ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
127 }
128 }
129 finally
130 {
131 Cursor.Current = Cursors.Default;
132 }
133 }
134 #endregion
135
136 #region 打印
137
138 /// <summary>
139 /// 打印
140 /// </summary>
141 public void Print()
142 {
143 try
144 {
145 if (DevExpress.XtraPrinting.PrintHelper.IsPrintingAvailable)
146 {
147 if (_PrintHeader != null)
148 {
149 PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter;
150
151 //设置页眉
152 phf.Header.Content.Clear();
153 phf.Header.Content.AddRange(new string[] { "", _PrintHeader, "" });
154 phf.Header.Font = new System.Drawing.Font("宋体", 14, System.Drawing.FontStyle.Bold);
155 phf.Header.LineAlignment = BrickAlignment.Center;
156
157 //设置页脚
158 phf.Footer.Content.Clear();
159 phf.Footer.Content.AddRange(new string[] { "", "", _PrintFooter });
160 phf.Footer.Font = new System.Drawing.Font("宋体", 9, System.Drawing.FontStyle.Regular);
161 phf.Footer.LineAlignment = BrickAlignment.Center;
162
163 }
164 link.PaperKind = ps.PageSettings.PaperKind;
165 link.Margins = ps.PageSettings.Margins;
166 link.Landscape = ps.PageSettings.Landscape;
167 link.CreateDocument();
168 link.CreateDocument();
169 //汉化
170 // DevExpress.XtraPrinting.Localization.PreviewLocalizer.Active = new Dxperience.LocalizationCHS.DxperienceXtraPrintingLocalizationCHS();
171 ps.Print();
172 }
173 else
174 {
175 Cursor.Current = Cursors.Default;
176 MessageBox.Show("打印机不可用 ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
177 }
178 }
179 finally
180 {
181 }
182 }
183
184 #endregion
185
186 #region 获取页面设置信息
187
188 /// <summary>
189 /// 获取页面设置信息
190 /// </summary>
191 public void LoadPageSetting()
192 {
193 System.Drawing.Printing.Margins margins = new System.Drawing.Printing.Margins(60, 60, 60, 60);
194 ps.PageSettings.Assign(margins, _paperKind, _landScape);
195 }
196 #endregion
197 }
198 }
199
调用代码
1 private void 打印预览ToolStripMenuItem_Click(object sender, EventArgs e)
2 {
3 PrintClass printClass = new PrintClass(this.chartControl1);
4
5 printClass.LandScape = true;
6
7 printClass.PaperKind = System.Drawing.Printing.PaperKind.A4;
8
9 printClass.LoadPageSetting();
10
11 printClass.Preview();
12 }
2 {
3 PrintClass printClass = new PrintClass(this.chartControl1);
4
5 printClass.LandScape = true;
6
7 printClass.PaperKind = System.Drawing.Printing.PaperKind.A4;
8
9 printClass.LoadPageSetting();
10
11 printClass.Preview();
12 }
5、通过以上这两个类就能完全实现各种控件的打印了,只要一个控件实现了DevExpress.XtraPrinting.IPrintable这个接口就能够对该控件进行打印,如GridControl,CharControl等。