C#实现三线表格格式打印
经过两天的调试终于达到让自己满足的效果,贴出部分程序,方便以后使用
private int _pages = 0;//页码private int _itemCount = 0; //项计数器private bool _isFirstPage = true;private int _count = 0;//行计数器/// <summary>/// 打印,以三线制表格格式打印告警信息/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void printDocument_PrintPage(object sender, PrintPageEventArgs e){Graphics g = e.Graphics;float yPosition = 0;//绘制字符串的纵向位置float leftmargin = e.MarginBounds.Left; //左边距float topMargin = e.MarginBounds.Top;float paperWidth = e.MarginBounds.Width;Font printFont = new Font(new FontFamily("黑体"),9);float fontHeight = printFont.GetHeight(g);SizeF fontSize = g.MeasureString("告", printFont);//正文字体尺寸(高,宽)SizeF titleFontSize = g.MeasureString("监", new Font(new FontFamily("黑体"),11));//标题字体尺寸SolidBrush printBrush = new SolidBrush(Color.Black);//一页所能打印行数var linesPerPage = e.MarginBounds.Height/fontHeight-5;if (_isFirstPage) {//打印标题g.DrawString("标题", new Font(new FontFamily("黑体"), 11), printBrush,new PointF(paperWidth/2 - 4*titleFontSize.Width, topMargin));//打印副标题yPosition = topMargin + titleFontSize.Height;g.DrawString(string.Format("ID: {0}\t告警等级: {1}", _printTrfId, _printAlarmLevel), printFont,printBrush, new PointF(leftmargin, yPosition));yPosition = yPosition + 3 * fontSize.Height / 2;_pages = 0;_count = 0;_isFirstPage = false;}//打印上边框,三线表格第一线g.DrawLine(Pens.Black,new Point((int)leftmargin, (int)(yPosition)),new Point((int)paperWidth, (int)(yPosition)));//打印表头,列标头yPosition += fontSize.Height/2;float x1 = leftmargin + g.MeasureString("2015/9/6 15:58:43", printFont).Width;g.DrawString(_colHeader[0].Text, printFont, printBrush, new PointF((x1 + leftmargin) / 2 - 2 * fontSize.Width, yPosition));//告警时间float x2 = x1 + fontSize.Width;g.DrawString(_colHeader[1].Text, printFont, printBrush, new PointF(x2, yPosition));//IDfloat x3 = x2 + g.MeasureString(_colHeader[1].Text, printFont).Width + fontSize.Width;g.DrawString(_colHeader[2].Text, printFont, printBrush, new PointF(x3, yPosition));//告警等级float x4 = x3 + g.MeasureString(_colHeader[2].Text, printFont).Width + 3 * fontSize.Width;g.DrawString(_colHeader[3].Text, printFont, printBrush, new PointF(x4, yPosition));//告警参数float x5 = x4 + g.MeasureString("最大参数值名", printFont).Width;//+ 4 * fontSize.Width;g.DrawString(_colHeader[4].Text, printFont, printBrush, new PointF((x4 + paperWidth) / 2 - 2 * fontSize.Width, yPosition));//打印表格线,三线表格第二线yPosition += 3*fontSize.Height/2;g.DrawLine(Pens.Black, new Point((int)leftmargin, (int)(yPosition)), new Point((int)paperWidth, (int)(yPosition)));//打印表内容yPosition += fontSize.Height/2;float leftWidth = paperWidth - x5+8*fontSize.Width;//剩余宽度while (yPosition/fontHeight < linesPerPage && _itemCount > 0) {if (_listViewItems[_count].SubItems[1].Text == _printTrfId && _listViewItems[_count].SubItems[2].Text == _printAlarmLevel)yPosition = DrawItems(g, _listViewItems, _count, printFont, printBrush, leftmargin, yPosition, fontSize, x2, x3, x4, leftWidth, x5);else if (_printTrfId== "All"&& _listViewItems[_count].SubItems[2].Text == _printAlarmLevel)yPosition = DrawItems(g, _listViewItems, _count, printFont, printBrush, leftmargin, yPosition, fontSize, x2, x3, x4, leftWidth, x5);else if (_printAlarmLevel == "All"&& _listViewItems[_count].SubItems[1].Text == _printTrfId)yPosition = DrawItems(g, _listViewItems, _count, printFont, printBrush, leftmargin, yPosition, fontSize, x2, x3, x4, leftWidth, x5);else if (_printTrfId == "All" && _printAlarmLevel == "All")yPosition = DrawItems(g, _listViewItems, _count, printFont, printBrush, leftmargin, yPosition, fontSize, x2, x3, x4, leftWidth, x5);_count++;_itemCount--;}//打印底边框,三线表格第三线yPosition += fontSize.Height / 2;g.DrawLine(Pens.Black, new Point((int)leftmargin, (int)(yPosition)), new Point((int)paperWidth, (int)(yPosition)));//判断是否打印多页if (_itemCount > 0) {e.HasMorePages = true;} else {e.HasMorePages = false;_isFirstPage = true;//打印签字位置yPosition += fontSize.Height;g.DrawString(string.Format("时间: {0}\t\t负责人___________", DateTime.Now.ToString(CultureInfo.CurrentCulture)),printFont, printBrush, new PointF(leftmargin, yPosition));}//打印页数_pages++;g.DrawString(_pages.ToString(), printFont, printBrush, new PointF(paperWidth/2, e.MarginBounds.Height-5*fontSize.Height/2));}/// <summary>/// 打印告警项/// </summary>/// <param name="g"></param>/// <param name="listViewItem"></param>/// <param name="count"></param>/// <param name="printFont"></param>/// <param name="printBrush"></param>/// <param name="leftmargin"></param>/// <param name="yPosition"></param>/// <param name="fontSize"></param>/// <param name="x2"></param>/// <param name="x3"></param>/// <param name="x4"></param>/// <param name="leftWidth"></param>/// <param name="x5"></param>/// <returns></returns>private static float DrawItems(Graphics g, ListView.ListViewItemCollection listViewItem, int count, Font printFont,SolidBrush printBrush, float leftmargin, float yPosition, SizeF fontSize, float x2, float x3, float x4,float leftWidth, float x5){yPosition += fontSize.Height;//告警时间g.DrawString(listViewItem[count].SubItems[0].Text, printFont, printBrush,new PointF(leftmargin, yPosition - 3*fontSize.Height/4));//IDvar xPosition = x2 + 2*fontSize.Width/3; //绘制字符串的横向位置g.DrawString(listViewItem[count].SubItems[1].Text, printFont, printBrush,new PointF(xPosition, yPosition - 3*fontSize.Height/4));//告警等级if (listViewItem[count].SubItems[2].Text.Length == 4)xPosition = x3;else xPosition = x3 + fontSize.Width/2;g.DrawString(listViewItem[count].SubItems[2].Text, printFont, printBrush,new PointF(xPosition, yPosition - 3*fontSize.Height/4));//告警参数if (listViewItem[count].SubItems[3].Text.Length > 4)xPosition = x4 - 3*fontSize.Width/2;else xPosition = x4;g.DrawString(listViewItem[count].SubItems[3].Text, printFont, printBrush,new PointF(xPosition, yPosition - 3*fontSize.Height/4));//告警信息if (listViewItem[count].SubItems[4].Text.Length*fontSize.Width > leftWidth) {g.DrawString(listViewItem[count].SubItems[4].Text.Substring(0, (int) (leftWidth/fontSize.Width)), printFont,printBrush, new PointF(x5, yPosition - 3*fontSize.Height/4));yPosition += fontSize.Height;if (listViewItem[count].SubItems[4].Text.Length*fontSize.Width - leftWidth > leftWidth) {g.DrawString(listViewItem[count].SubItems[4].Text.Substring((int) (leftWidth/fontSize.Width),(int) (leftWidth/fontSize.Width)), printFont, printBrush,new PointF(x5, yPosition - 3*fontSize.Height/4));yPosition += fontSize.Height;g.DrawString(listViewItem[count].SubItems[4].Text.Substring((int) (leftWidth/fontSize.Width)*2), printFont,printBrush, new PointF(x5, yPosition - 3*fontSize.Height/4));} else {g.DrawString(listViewItem[count].SubItems[4].Text.Substring((int) (leftWidth/fontSize.Width)), printFont,printBrush, new PointF(x5, yPosition - 3*fontSize.Height/4));}} else {g.DrawString(listViewItem[count].SubItems[4].Text, printFont, printBrush,new PointF(x5, yPosition - 3*fontSize.Height/4));}return yPosition;}
效果图:
待改进地方:1、创建成类
2、所有行水平居中,特别是告警信息为多行时;
3、页面设置功能。
C#实现三线表格格式打印相关推荐
- 如何在 Python 中以表格格式打印列表?
在 Python 中,列表是一种常见的数据结构,用于存储和组织数据.当我们需要将列表的内容以表格形式展示时,可以通过特定的方法和技巧来实现.本文将详细介绍如何在 Python 中以表格格式打印列表,以 ...
- 计算机在表格顶端添加标题,电脑Excel表格在打印时怎么设置每页有相同的顶端标题和底端标题...
电脑Excel表格在打印时怎么设置每页有相同的顶端标题和底端标题 腾讯视频/爱奇艺/优酷/外卖 充值4折起 我们经常需要使用Excel来处理数据.那么今天小编跟大家分享下电脑Excel表格在打印时怎么 ...
- html打印预览出现重叠,求高手解答:在WORD 中插入EXCEL表格,打印出现字重叠的问题...
求高手解答:在WORD 中插入EXCEL表格,打印出现字重叠的问题以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 求高手 ...
- /* * 编程题第五题(20分): 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“
题目: 编程题第五题(20分): 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***************** 所谓" ...
- 如何以类似JSON的格式打印圆形结构?
本文翻译自:How can I print a circular structure in a JSON-like format? I have a big object I want to conv ...
- wps不能打印_Excel表格怎么打印在一张纸上?
不知道小伙伴们有没有遇到过一个问题,就是在需要打印表格的时候,还是特别匆忙的情况下,结果打印机没有多余的纸了,只剩下那么一两张,这就很难为人呀.当然,还有一种情况是表格本来刚好可以打印一张纸,不用浪费 ...
- 雅客EXCEL(6)-通用表格格式、销售实际案例(总结之前的知识点)
文章目录 1.通用表格格式 2 .销售实际案例 1.删除空格 2.添加序号 3.取消合并单元格 4.数据原子化 5.取消乱加表头 6.删除空行 7.检查数据类型并更正 8.文本数据参与运算 9.数据表 ...
- php打印四行三列表格,php打印数组_php数组实例之表格状打印
摘要 腾兴网为您分享:php数组实例之表格状打印,云端学习,洋游码头,央视影音,新东方等软件知识,以及cleverqq机器人,熊猫tv直播,造价通app,诺基亚手机解锁,qqtool,qq浏览器微,国 ...
- 切片器可以设置日期格式?_Excel智能表格——套用表格格式,“一键变身”
大家好,我是执着于研究Office小技巧的Angie-- Excel表格堪称职场达人必做项,为了追求美观可视化,每次都要手动操作对表格边框.单元格填充.字体大小进行设置,重点是每次自定义设置完,不仅没 ...
最新文章
- 2022-2028年中国未硫化橡胶制品行业市场运行格局及未来前景展望报告
- UVA 10405 - Longest Common Subsequence
- jpg图片与jpeg图片格式的区别(没有区别,.jpg只是扩展名.jpeg的缩写)
- 《iOS 全埋点技术白皮书》重磅推出
- 导师推荐 | 第 4 期临床基因组家系分析,同时解决科研和临床问题
- MYSQL GROUP BY 对多个字段进行分组
- php链表删除元素,PHP之从反向删除单链表元素的问题谈起
- element ui 邮箱非必填校验
- 【Linux】scp IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
- 乘风破浪,遇见未来新能源汽车(Electric Vehicle)之特斯拉提车必须知道的十个流程
- java后台restTemplate生成二小程序维码,前端渲染
- 解决 手机能连接上wifi而电脑却却不能连接上wifi的情况
- java-php-python-ssm医药网络挂号系统计算机毕业设计
- css内容超过宽度显示省略号没效果,文字超过两行折叠省略
- aosp_015.配置编译文件,删除自带app
- 卸载wps后office图标无法显示(亲测有效)
- java实现生成二维码及扫码登录
- Matlab/simulink采样仿真数据(时序)和时间序列的保存
- python openCv 入门学习-RGB转HSV、掩膜的简单理解(二)
- linux fastq.gz文件如何解压,科学网—批量gzip,ungzip快速压缩和解压fastq文件 - 陈明杰的博文...
热门文章
- 对cmake工程debug时出现错误 1: Syntax error: ( unexpected
- 广度优先搜索算法及常用操作和模板
- ssh方式登录树莓派
- 上海理工大学计算机及应用,上海理工大学光电信息与计算机工程学院研究生导师简介-金爱娟...
- Unable to find a valid cuDNN algorithm to run convolution (内有解决方法)
- 房产中介、房屋租赁、房屋买卖APP(H5)
- Android如何设计一个H5容器
- 安徽大学计算机科学毕业设计,安徽大学计算机学院本科毕业论文(设计)案例.pdf...
- 小程序源码:全新独家云开发微群人脉小程序源码下载社群空间站
- DSP芯片有什么特点?如何对DSP芯片进行分类?