经过两天的调试终于达到让自己满足的效果,贴出部分程序,方便以后使用

        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#实现三线表格格式打印相关推荐

  1. 如何在 Python 中以表格格式打印列表?

    在 Python 中,列表是一种常见的数据结构,用于存储和组织数据.当我们需要将列表的内容以表格形式展示时,可以通过特定的方法和技巧来实现.本文将详细介绍如何在 Python 中以表格格式打印列表,以 ...

  2. 计算机在表格顶端添加标题,电脑Excel表格在打印时怎么设置每页有相同的顶端标题和底端标题...

    电脑Excel表格在打印时怎么设置每页有相同的顶端标题和底端标题 腾讯视频/爱奇艺/优酷/外卖 充值4折起 我们经常需要使用Excel来处理数据.那么今天小编跟大家分享下电脑Excel表格在打印时怎么 ...

  3. html打印预览出现重叠,求高手解答:在WORD 中插入EXCEL表格,打印出现字重叠的问题...

    求高手解答:在WORD 中插入EXCEL表格,打印出现字重叠的问题以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 求高手 ...

  4. /* * 编程题第五题(20分): 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“

    题目: 编程题第五题(20分): 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 *****************    所谓" ...

  5. 如何以类似JSON的格式打印圆形结构?

    本文翻译自:How can I print a circular structure in a JSON-like format? I have a big object I want to conv ...

  6. wps不能打印_Excel表格怎么打印在一张纸上?

    不知道小伙伴们有没有遇到过一个问题,就是在需要打印表格的时候,还是特别匆忙的情况下,结果打印机没有多余的纸了,只剩下那么一两张,这就很难为人呀.当然,还有一种情况是表格本来刚好可以打印一张纸,不用浪费 ...

  7. 雅客EXCEL(6)-通用表格格式、销售实际案例(总结之前的知识点)

    文章目录 1.通用表格格式 2 .销售实际案例 1.删除空格 2.添加序号 3.取消合并单元格 4.数据原子化 5.取消乱加表头 6.删除空行 7.检查数据类型并更正 8.文本数据参与运算 9.数据表 ...

  8. php打印四行三列表格,php打印数组_php数组实例之表格状打印

    摘要 腾兴网为您分享:php数组实例之表格状打印,云端学习,洋游码头,央视影音,新东方等软件知识,以及cleverqq机器人,熊猫tv直播,造价通app,诺基亚手机解锁,qqtool,qq浏览器微,国 ...

  9. 切片器可以设置日期格式?_Excel智能表格——套用表格格式,“一键变身”

    大家好,我是执着于研究Office小技巧的Angie-- Excel表格堪称职场达人必做项,为了追求美观可视化,每次都要手动操作对表格边框.单元格填充.字体大小进行设置,重点是每次自定义设置完,不仅没 ...

最新文章

  1. 2022-2028年中国未硫化橡胶制品行业市场运行格局及未来前景展望报告
  2. UVA 10405 - Longest Common Subsequence
  3. jpg图片与jpeg图片格式的区别(没有区别,.jpg只是扩展名.jpeg的缩写)
  4. 《iOS 全埋点技术白皮书》重磅推出
  5. 导师推荐 | 第 4 期临床基因组家系分析,同时解决科研和临床问题
  6. MYSQL  GROUP BY 对多个字段进行分组
  7. php链表删除元素,PHP之从反向删除单链表元素的问题谈起
  8. element ui 邮箱非必填校验
  9. 【Linux】scp IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
  10. 乘风破浪,遇见未来新能源汽车(Electric Vehicle)之特斯拉提车必须知道的十个流程
  11. java后台restTemplate生成二小程序维码,前端渲染
  12. 解决 手机能连接上wifi而电脑却却不能连接上wifi的情况
  13. java-php-python-ssm医药网络挂号系统计算机毕业设计
  14. css内容超过宽度显示省略号没效果,文字超过两行折叠省略
  15. aosp_015.配置编译文件,删除自带app
  16. 卸载wps后office图标无法显示(亲测有效)
  17. java实现生成二维码及扫码登录
  18. Matlab/simulink采样仿真数据(时序)和时间序列的保存
  19. python openCv 入门学习-RGB转HSV、掩膜的简单理解(二)
  20. linux fastq.gz文件如何解压,科学网—批量gzip,ungzip快速压缩和解压fastq文件 - 陈明杰的博文...

热门文章

  1. 对cmake工程debug时出现错误 1: Syntax error: ( unexpected
  2. 广度优先搜索算法及常用操作和模板
  3. ssh方式登录树莓派
  4. 上海理工大学计算机及应用,上海理工大学光电信息与计算机工程学院研究生导师简介-金爱娟...
  5. Unable to find a valid cuDNN algorithm to run convolution (内有解决方法)
  6. 房产中介、房屋租赁、房屋买卖APP(H5)
  7. Android如何设计一个H5容器
  8. 安徽大学计算机科学毕业设计,安徽大学计算机学院本科毕业论文(设计)案例.pdf...
  9. 小程序源码:全新独家云开发微群人脉小程序源码下载社群空间站
  10. DSP芯片有什么特点?如何对DSP芯片进行分类?