实例介绍
【实例简介】
【实例截图】
【核心代码】
using System; using System.Collections; using System.Data; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms; namespace OmnipotentPrint { public class PrintClass { #region 全局变量 public static bool PageScape; private readonly DataGridView dataGridView; private readonly PageSetupDialog pageSetupDialog; private readonly PrintDocument printDocument; private readonly PrintPreviewDialog printPreviewDialog; private readonly string title = ""; private readonly int titleSize = 16; public int AlignmentSgin = -1; public int BottomMargin = 80; public bool Boundary; public Brush Brush = new SolidBrush(Color.Black); public Brush BrushCellBack = new SolidBrush(Color.White); public Brush BrushCellFont = new SolidBrush(Color.Black); public Brush BrushHeaderBack = new SolidBrush(Color.White); public Brush BrushHeaderFont = new SolidBrush(Color.Black); public Font CellFont = new Font("arial", 9); public int CellLeftMargin = 40; public int CellTopMargin = 6; public int CenterAlignment; public int ColGap = 5; public Font FooterFont = new Font("arial", 8); public int HeaderAlignment; public Font HeaderFont = new Font("arial", 9, FontStyle.Bold); public int HeaderHeight = 30; public bool IsAutoPageRowCount = true; public bool IsEveryPagePrintTitle; public int LeftAlignment = 50; public int LeftMargin = 50; public Color LineColor = Color.Black; public bool LineLeft = true; public bool LineUnit = true; public bool LineUp = true; public bool NeedPrintPageIndex = true; public bool PageAspect; public int PageRowCount = 7; public int PageSheet; public int PrintPageHeight = 1169; public int PrintPageWidth = 827; public int RightAlignment = 50; public int RowGap = 23; public Font TextFont = new Font("arial", 10); public Font TitleFont = new Font("arial", 14); public int TopMargin = 60; public Font UnderlineFont = new Font("arial", 8); public int UnitAlignment; public Font UplineFont = new Font("arial", 9, FontStyle.Bold); public int X; private int currentPageIndex; private int pageCount; private int rowCount; private int xOffset; #endregion #region 打印信息的初始化 public PrintClass(DataGridView dataGridView, string title, int titleSize, int pageSheet, bool landScape) { this.title = title; this.titleSize = titleSize; this.dataGridView = dataGridView; PageSheet = pageSheet; printDocument = new PrintDocument(); pageSetupDialog = new PageSetupDialog(); pageSetupDialog.Document = printDocument; printPreviewDialog = new PrintPreviewDialog(); printPreviewDialog.Document = printDocument; printPreviewDialog.FormBorderStyle = FormBorderStyle.Fixed3D; if (pageSheet >= 0) { if (landScape) { printDocument.DefaultPageSettings.Landscape = landScape; } else { printDocument.DefaultPageSettings.Landscape = landScape; } } pageSetupDialog.Document = printDocument; printDocument.PrintPage = PrintPage; } #endregion #region 纸张大小的设置 public string PageSize(int n) { string pageSize = ""; switch (n) { case 1: { pageSize = "A5"; PrintPageWidth = 583; PrintPageHeight = 827; break; } case 2: { pageSize = "A6"; PrintPageWidth = 413; PrintPageHeight = 583; break; } case 3: { pageSize = "B5(ISO)"; PrintPageWidth = 693; PrintPageHeight = 984; break; } case 4: { pageSize = "B5(JIS)"; PrintPageWidth = 717; PrintPageHeight = 1012; break; } case 5: { pageSize = "Double Post Card"; PrintPageWidth = 583; PrintPageHeight = 787; break; } case 6: { pageSize = "Envelope #10"; PrintPageWidth = 412; PrintPageHeight = 950; break; } case 7: { pageSize = "Envelope B5"; PrintPageWidth = 693; PrintPageHeight = 984; break; } case 8: { pageSize = "Envelope C5"; PrintPageWidth = 638; PrintPageHeight = 902; break; } case 9: { pageSize = "Envelope DL"; PrintPageWidth = 433; PrintPageHeight = 866; break; } case 10: { pageSize = "Envelope Monarch"; PrintPageWidth = 387; PrintPageHeight = 750; break; } case 11: { pageSize = "ExeCutive"; PrintPageWidth = 725; PrintPageHeight = 1015; break; } case 12: { pageSize = "Legal"; PrintPageWidth = 850; PrintPageHeight = 1400; break; } case 13: { pageSize = "Letter"; PrintPageWidth = 850; PrintPageHeight = 1100; break; } case 14: { pageSize = "Post Card"; PrintPageWidth = 394; PrintPageHeight = 583; break; } case 15: { pageSize = "16K"; PrintPageWidth = 775; PrintPageHeight = 1075; break; } case 16: { pageSize = "8.5x13"; PrintPageWidth = 850; PrintPageHeight = 1300; break; } } return pageSize; } #endregion #region 页边距的设置 public void PrintSetUp(string[] margins) { if (margins[0] == "true") { TopMargin = Int32.Parse(margins[1]); LeftMargin = Int32.Parse(margins[2]); BottomMargin = Int32.Parse(margins[3]); AlignmentSgin = -1; } } #endregion #region 文字的位置 private int AlignmentMode(int cellWidth, int stringWidth, int colLeftPadding, int alignment) { int enumAlignment = 0; switch (alignment) { case 0: { enumAlignment = colLeftPadding; break; } case 1: { enumAlignment = ((cellWidth - stringWidth)/2); break; } case 2: { enumAlignment = cellWidth - stringWidth - colLeftPadding; break; } } return enumAlignment; } #endregion #region 页的打印事件 private void PrintPage(object sender, PrintPageEventArgs e) { PrintPageWidth = e.PageBounds.Width; PrintPageHeight = e.PageBounds.Height; if (IsAutoPageRowCount) PageRowCount = ((PrintPageHeight - TopMargin - titleSize - HeaderFont.Height - HeaderHeight - BottomMargin)/RowGap); pageCount = (rowCount/PageRowCount); pageSetupDialog.AllowOrientation = true; if (rowCount%PageRowCount > 0) pageCount ; int colCount = 0; int Y = TopMargin; string cellValue = ""; int startRow = currentPageIndex*PageRowCount; int endRow = startRow PageRowCount < rowCount ? startRow PageRowCount : rowCount; int currentPageRowCount = endRow - startRow; colCount = dataGridView.ColumnCount; X = LeftMargin; int reportWidth = 0; for (int j = 0; j < colCount; j ) { if (dataGridView.Columns[j].Width > 0) { reportWidth = dataGridView.Columns[j].Width ColGap; } } if (AlignmentSgin >= -1) { int headerWidth = (int) (e.Graphics.MeasureString(title, TitleFont).Width); switch (AlignmentSgin) { case 0: { X = LeftAlignment; LeftMargin = X; if (headerWidth > reportWidth) { xOffset = LeftMargin; } else { xOffset = (PrintPageWidth - (PrintPageWidth - 50) (reportWidth - headerWidth)/2); } break; } case 1: { X = (PrintPageWidth - reportWidth)/2; LeftMargin = X; xOffset = ((PrintPageWidth - headerWidth)/2); break; } case 2: { X = PrintPageWidth - reportWidth - RightAlignment; LeftMargin = X; if (headerWidth > reportWidth) { xOffset = (PrintPageWidth - headerWidth); } else { xOffset = (PrintPageWidth - 50 - reportWidth (reportWidth - headerWidth)/2); } break; } case -1: { if (headerWidth > reportWidth) { if ((headerWidth - reportWidth)/2 < LeftMargin) { xOffset = (LeftMargin - (headerWidth - reportWidth)/2); } else { xOffset = LeftMargin; } } else xOffset = (X (reportWidth - headerWidth)/2); break; } } } if (currentPageIndex == 0 || IsEveryPagePrintTitle) { e.Graphics.DrawString(title, TitleFont, Brush, xOffset, Y); Y = titleSize; } Y = RowGap; Point headUp = new Point(X, Y); Point headDown = new Point(reportWidth, HeaderHeight); DrawRectangle(BrushHeaderBack, headUp, headDown, e.Graphics); headUp = new Point(X, Y HeaderHeight); headDown = new Point(reportWidth, (endRow - startRow)*RowGap); DrawRectangle(BrushCellBack, headUp, headDown, e.Graphics); if (LineLeft) { DrawLine(new Point(X, Y), new Point(X, Y currentPageRowCount*RowGap HeaderHeight), e.Graphics, 0); } for (int j = 0; j < colCount; j ) { int colWidth = dataGridView.Columns[j].Width; if (colWidth > 0) { cellValue = dataGridView.Columns[j].HeaderText; int height = AlignmentMode(dataGridView.Columns[j].Width, (int) (e.Graphics.MeasureString(cellValue, CellFont).Width), CellLeftMargin, HeaderAlignment); e.Graphics.DrawString(cellValue, HeaderFont, BrushHeaderFont, X height, Y CellTopMargin); X = colWidth ColGap; if (LineUnit) { DrawLine(new Point(X, Y), new Point(X, Y currentPageRowCount*RowGap HeaderHeight), e.Graphics, 0); } if (LineLeft && (j == (colCount - 1))) { DrawLine(new Point(X, Y), new Point(X, Y currentPageRowCount*RowGap HeaderHeight), e.Graphics, 0); } int nnp = Y currentPageRowCount*RowGap HeaderHeight; } } int rightbound = X; if (LineUp) { DrawLine(new Point(LeftMargin, Y), new Point(rightbound, Y), e.Graphics, 0); } headUp = new Point(LeftMargin, Y); Y = HeaderHeight; for (int i = startRow; i < endRow; i ) { X = LeftMargin; for (int j = 0; j < colCount; j ) { if (dataGridView.Columns[j].Width > 0) { cellValue = dataGridView.Rows[i].Cells[j].Value.ToString(); int Ua = AlignmentMode(dataGridView.Columns[j].Width, (int) (e.Graphics.MeasureString(cellValue, CellFont).Width), CellLeftMargin, UnitAlignment); e.Graphics.DrawString(cellValue, CellFont, BrushHeaderFont, X Ua, Y CellTopMargin); X = dataGridView.Columns[j].Width ColGap; Y = Y RowGap*(cellValue.Split(new[] {'\r', '\n'}).Length - 1); } } if (LineUnit) { DrawLine(new Point(LeftMargin, Y), new Point(rightbound, Y), e.Graphics, 0); } if (Boundary && i == startRow) { DrawLine(new Point(LeftMargin, Y), new Point(rightbound, Y), e.Graphics, 1); } Y = RowGap; } if (LineUp) { DrawLine(new Point(LeftMargin, Y), new Point(rightbound, Y), e.Graphics, 0); } currentPageIndex ; if (NeedPrintPageIndex) { e.Graphics.DrawString("共 " pageCount.ToString() " 页 第 " currentPageIndex.ToString() " 页", FooterFont, Brush, PrintPageWidth - 200, (PrintPageHeight - BottomMargin/2 - FooterFont.Height)); } if (currentPageIndex < pageCount) { e.HasMorePages = true; } else { e.HasMorePages = false; currentPageIndex = 0; } } #endregion #region 绘制边线 private void DrawLine(Point startPoint, Point endPoint, Graphics graphics, int flag) { int width = 1; if (flag == 1) { width = 2; } Pen pen = new Pen(LineColor, width); graphics.DrawLine(pen, startPoint, endPoint); } #endregion #region 绘制填充的矩形框 private void DrawRectangle(Brush backColor, Point point1, Point point2, Graphics graphics) { graphics.FillRectangle(backColor, point1.X, point1.Y, point2.X, point2.Y); } #endregion #region 显示打印预览窗体 public void Print() { rowCount = 0; string paperName = PageSize(PageSheet); PageSettings storePageSetting = new PageSettings(); foreach (PaperSize paperSize in printDocument.PrinterSettings.PaperSizes) { if (paperName == paperSize.PaperName) { storePageSetting.PaperSize = paperSize; } } if (dataGridView.DataSource.GetType().ToString() == "System.Data.DataTable") { rowCount = ((DataTable) dataGridView.DataSource).Rows.Count; } else if (dataGridView.DataSource.GetType().ToString() == "System.Collections.ArrayList") { rowCount = ((ArrayList) dataGridView.DataSource).Count; } try { printDocument.DefaultPageSettings.Landscape = PageScape; pageSetupDialog.Document = printDocument; printPreviewDialog.ShowDialog(); } catch (Exception e) { throw new Exception("Printer Error." e.Message); } } #endregion } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论