C# winform中的打印方式

在开发winform时,有时候会需要用到打印功能,在项目中原有的打印功能是先放一个模板文件,然后将自己需要打印的文件,放入模板文件,最后再打印出来。这样的实现方式是可以实现大多数的打印的,但是因为我从事的是工业互联网,服务的客户的硬件设备都还是比较落后的,有的系统还是win7,设置还有xp系统,这样就可能会导致格式不兼容的问题。比如最近客户要求打印的时候直接打印出发票格式,不想点击纸张格式来设置。用项目中原有的方法,在win10系统下,可以通过设置文件的打印格式,或者是设置打印机的首选项来满足客户的需求,但是我的客户用的是xp系统,无论我这边通过代码还是文件指定,又或者是指定打印机首选项都不能满足客户需求,最后我选择了重新绘制的方法来重新实现打印功能。在记录这种方法之前还是先学习一下项目中原有的打印功能,这样更能加深印象,而且在第一种方法可以满足客户需求的前提下,第一种实现方法要比第二种方便很多。

使用Excel.workbook来实现

首先在在管理解决方案的nuget中下载安装Microsoft.office.Interop.Excel。然后主要实现的代码如下:

 Microsoft.Office.Interop.Excel.Application myExcel = new Microsoft.Office.Interop.Excel.Application();//打开模板文件byte[] buff = Properties.Resources.OC2;File.WriteAllBytes("OC2.xls", buff);string path = Application.StartupPath; //获取当前路径Microsoft.Office.Interop.Excel.Workbook book = myExcel.Application.Workbooks.Add(path + @"\OC2.xls");Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)book.Worksheets[1];//指定为横向打印xlSheet.PageSetup.Orientation = Microsoft.Office.Interop.Excel.XlPageOrientation.xlPortrait;//指定纸张大小xlSheet.PageSetup.PaperSize = Microsoft.Office.Interop.Excel.XlPaperSize.xlPaperA4;//这里就是赋值过程,是给指定excle单元格赋值xlSheet.Cells[2, 9].Value += wp.getProcessNameStr(this.mProcCheckInfo.ProcId);xlSheet.Cells[3, 1].Value += this.mProcCheckInfo.MoldNum;xlSheet.PrintPreview();//打印预览

可以看的到这里的赋值过程是比较清楚的,就是将我们需要打印出来的值赋值到我们的模板excel文件中去。最后再调用打印来打印文件。

自已绘制指定纸张大小打印

上面有一行代码是指点纸张大小,默认的有常见的纸张大小,并不能自定义纸张大小。为了实现自定义纸张大小,首先要在页面中添加PrintDocument控件和PrintPreviewDialog控件。具体实现部分代码如下:

//指定纸张大小,这里的单位是英寸不是厘米,需要计算一下,百度上有换算计算机this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("Custom", 800, 551);this.printDocument1.PrintPage += new PrintPageEventHandler(this.MyPrintDocument_PrintPage);private void MyPrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e){//画图 Image newImage = Properties.Resources.logor;//前两个数表示起始点坐标,后两个点表示长宽e.Graphics.DrawImage(newImage, 40, 20, 180, 60);//this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("Custom", 820, 700);/*如果需要改变自己 可以在new Font(new FontFamily("黑体"),11)中的“黑体”改成自己要的字体就行了,黑体 后面的数字代表字体的大小System.Drawing.Brushes.Blue , 170, 10 中的 System.Drawing.Brushes.Blue 为颜色,后面的为输出的位置 */e.Graphics.DrawString("制造有限公司", new Font(new FontFamily("黑体"), 12), System.Drawing.Brushes.Black, 310, 20);e.Graphics.DrawString("施工单", new Font(new FontFamily("黑体"), 10), System.Drawing.Brushes.Black, 350, 60);//信息的名称e.Graphics.DrawString("NO."+this.mProcCheckInfo.ExtnNum, new Font(new FontFamily("黑体"), 10), System.Drawing.Brushes.Black, 660, 60);e.Graphics.DrawLine(Pens.Black, 10, 80, 765, 80);//画线e.Graphics.DrawLine(Pens.Black, 10, 80, 10, 505);//写字e.Graphics.DrawString("外协件名称:" + this.mProcCheckInfo.MoldNum, new Font(new FontFamily("黑体"), 10), System.Drawing.Brushes.Black, 15, 90);}

通过自己写字和画图,来实现一个表格,可以指定笔的颜色,粗细,字体的大小等,也可以画图,基本上是可以实现所有的打印的,但是画图的过程还是比较麻烦的,要一条一条边去画,还要如果大小不合适,所有的线和文字的坐标又需要重新算一遍。同时,如果电脑连接多台打印机,会选择默认打印机,不会让我们选择打印机,所以要提前设置好默认打印机。

C# winform中的打印文件的实现方式相关推荐

  1. Winform中选取指定文件夹并获取其下所有文件

    场景 Winform中选取指定文件夹,并获取该文件夹下所有文件名,不包含子文件夹.考虑子文件夹可以使用递归实现. 注: 博客: BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_CSDN博客 ...

  2. iis架设aspx_在IIS6中配置html文件以ASPX方式工作

    在IIS6中配置html文件以ASPX方式工作 由于IIS6的安全不断提高,如果你需要设置html文件以ASPX文件方式被执行.仅仅设置应用程序映射是不够的,还 需要修改一些其他设置. 如果你只修改了 ...

  3. Winform中对xml文件进行保存时空白节点自动换行问题的解决

    场景 Winform中自定义xml配置文件后对节点进行读取与写入: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10053213 ...

  4. Winform中实现批量文件复制(附代码下载)

    场景 效果 将要批量复制的文件拖拽到窗体中,然后点击下边选择目标文件夹,然后点击复制按钮. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公 ...

  5. winform中获取指定文件夹下的所有图片

    方法一: C#的IO自带了一个方法 DirectoryInfo dir = new DirectoryInfo("文件夹名称"); dir.getFiles();//这个方法返回值 ...

  6. WinForm中AssemblyInfo.cs文件参数具体讲解

    在.NET中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数,下面是默认的AssemblyInfo.cs文件的内容具体介绍 //是否符合公共语言规 ...

  7. WinForm中关于选择文件、目录操作

    一.实现效果 1.1.选择文件 1.2.选择目录 二.核心脚本 /*** * Title:"数据采集" 项目 * 主题:选择本地文件 * Description: * 功能: * ...

  8. C# WinForm中四种显示信息的方式

    小白新的学习笔记 一.MessageBox.Show MessageBox 函数用于创建.显示并操作一个消息对话框.该对话框包含由调用程序定义的信息和标题,以及预先定义的图标和按钮. 命名空间:Sys ...

  9. Python中两种文件修改的方式

    文件的数据是存放于硬盘上的,因而只存在覆盖.不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式. 一.方式一 将硬盘存放的该文件的内容全部加载到内存,在内存中是可以 ...

最新文章

  1. 参加第十六届智能车竞赛学生提出的问题-05-10
  2. python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据
  3. 08-spring学习-annotation配置
  4. net core 中间件(MiddleWare)
  5. “云时代架构”经典文章阅读感想八
  6. 访问Cache和主存的效率计算问题
  7. iOS底层探索之LLVM(二)——自定义Clang插件(上)
  8. 李昌镐究竟是不是神?
  9. 将远程linux中的文件拷贝过来,Linux之间远程拷贝文件
  10. 杰理语音芯片ic玩具芯片ic的介绍_AD14NAD15N全系列开发
  11. local class incompatible: stream classdesc serialVersionUID = 61,local class serialVersionUID = 1
  12. python登录系统三次锁定_Python基础篇-账号登录错误三次锁定
  13. 测试-- 自动化测试selenium(关于API)
  14. thinkphp5.1生成错误日志文件以及Evn的使用
  15. 卓训教育:家庭教育的重要性,家庭教育的理念及基本方法
  16. Linux系统1.md
  17. PDF.js 实现pdf分页加载的前端优化(实现按需加载)-前端的demo也已经上传
  18. 坦克大战项目c语言代码,c语言 坦克大战 游戏源码下载
  19. 【WEB】Web性能压力测试工具
  20. MiCO系统开发MiCoder-IDE安装遇到的坑

热门文章

  1. 如何强制卸载软件,强制卸载的工具。
  2. minigui:静态编译连接mgncs库时遇到的xml2的问题
  3. 5g网络模式是以什么划分的_5g组网方式有哪些
  4. PyTorch 数据归一化与反归一化
  5. 启动马达接线实物图_电机星角启动电路如何接线(原理图及实物接线图)
  6. CMD(命令提示符)修改盘符
  7. 实践篇 | 机器人单目相机测距的实验
  8. 全球气象数据下载总结-CRU数据,ERA数据NCEP-2数据
  9. 【JAVA】-- 集合(四)(Map)
  10. ElementUI中某一列插入组件(slot-scope=“scope“用法)