做项目过程中,有一个需求,是要按照模板样式生成某个设备信息的二维码,并打印可以打印出来,于是用了以下代码实现:

1.需要按照模板打印,例如需要打印成这种布局:
可以看到,布局内不仅有文字,对象参数,二维码,方格等,所以思路是要先制作好一个固定的模板,然后打印时候将对象参数和二维码放到方格模板内即可。

于是用word制作了一个模板,并转成pdf格式

模板制作完成后开始编码

        private void Print(object obj){//判断要打印哪个对象参数if (DataTableControl.SelectObjects == null) {SystemService.MsgBoxService.ShowMsgBox("请选择要打印二维码的设备");return;}//以下五行是获取刚刚制作的模板文件,看各自的需求编写,只需要获取到模板文件即可。string fileName = "设备标签.pdf";string date = FileFun(fileName);string path = TempFileAccess.TempDir;var serviceTemplatPath = path + fileName;Model.HttpUpLoadSerivce.DownLoadUploadFile("instrument", date, fileName, serviceTemplatPath, null);//开始编写代码打印二维码和参数(对象可能有多个,如果需求是每次只打印一个,就不需要for循环)foreach (var i in DataTableControl.SelectObjects) {PdfDocument document = new PdfDocument();//通过文件路径获取刚刚下载好的模板document.LoadFromFile(serviceTemplatPath);DataGridRow dataGridRow = i as DataGridRow;//使用模板页面PdfPageBase pageIndex = document.Pages[0];pageIndex.Canvas.SetTransparency(1f, 1f, PdfBlendMode.Overlay);//自定义PdfTrueTypeFont、PdfPen实例PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 12f), true);PdfPen pen = new PdfPen(System.Drawing.Color.Black);//使用DrawString方法在指定位置写入文本string InstrumentName = "设备名称:" + dataGridRow.InstrumentName;string Type = "规格型号:" + dataGridRow.Type;string ManufacturingNumber = "出厂编号:" + dataGridRow.ManufacturingNumber;string ManagementNumber = "管理编号:" + dataGridRow.ManagementNumber;string SubordinateDepartments = "使用部门:" + dataGridRow.SubordinateDepartments;string keeper = "保管人:" + dataGridRow.Keeper;//这里的最后两个参数,是表示x,y轴长度,要根据自己的模板慢慢调好位置pageIndex.Canvas.DrawString(InstrumentName, font, pen, 120, 150);pageIndex.Canvas.DrawString(Type, font, pen, 120, 165);pageIndex.Canvas.DrawString(ManufacturingNumber, font, pen, 120, 180);pageIndex.Canvas.DrawString(ManagementNumber, font, pen, 120, 195);pageIndex.Canvas.DrawString(SubordinateDepartments, font, pen, 120, 210);pageIndex.Canvas.DrawString(keeper, font, pen, 120, 225);//创建BarcodeSettings对象BarcodeSettings settings = new BarcodeSettings();//设置条码类型为二维码settings.Type = BarCodeType.QRCode;//设置二维码数据(此处二维码也可以赋值为超链接,只要扫码了就可以跳转...现在我赋值的是设备的信息)settings.Data = InstrumentName + " " + Type + " " + ManufacturingNumber + " " + ManagementNumber + " " + SubordinateDepartments +" "+keeper;设置显示文本settings.Data2D = "⠀";//设置数据类型为数字settings.QRCodeDataMode = QRCodeDataMode.Numeric;//设置二维码错误修正级别settings.QRCodeECL = QRCodeECL.H;//设置宽度settings.X = 2.0f;//初始化BarCodeGenerator对象BarCodeGenerator generator = new BarCodeGenerator(settings);//创建图片并保存为PNG格式System.Drawing.Image image = generator.GenerateImage();//加载缩放后的图片到PdfImage对象PdfImage pdfImage = PdfImage.FromImage(image);//调整图片大小int width = image.Width;int height = image.Height;float scale = 0.18f;  //缩放比例SizeF size = new SizeF(width * scale, height * scale);//设置图片位置(二维码位置)float x = 400;float y = 150f;//在指定位置绘入图片pageIndex.Canvas.DrawImage(pdfImage, new PointF(x, y), size);//输出文件路径,并打开文件string filePath1 = LocalPath + "\\" + Common.Util.CommonUtils.GetUUId() + ".pdf";document.SaveToFile(filePath1);System.Diagnostics.Process.Start(filePath1);}}

这样就已经完成了,看看打印的效果:

大功告成。

当然还有另一种情况,就是不需要模板的情况,单纯空白页面打印二维码或者参数,这个更容易些,附上代码:

        private void Print(object obj){if (DataTableControl.SelectObjects == null) {SystemService.MsgBoxService.ShowMsgBox("请选择要打印二维码的设备");return;}foreach (var i in DataTableControl.SelectObjects) {PdfDocument document = new PdfDocument();DataGridRow dataGridRow = i as DataGridRow;PdfUnitConvertor unitCvtr = new PdfUnitConvertor();//新页面参数PdfMargins margins = new PdfMargins();margins.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);margins.Bottom = margins.Top;margins.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);margins.Right = margins.Left;//添加新页(不使用模板,则要添加新页面)PdfPageBase pageIndex = document.Pages.Add(PdfPageSize.A4, margins);pageIndex.Canvas.SetTransparency(1f, 1f, PdfBlendMode.Overlay);//自定义PdfTrueTypeFont、PdfPen实例PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 12f), true);PdfPen pen = new PdfPen(System.Drawing.Color.Black);//使用DrawString方法在指定位置写入文本string InstrumentName = "设备名称:" + dataGridRow.InstrumentName;string Type = "规格型号:" + dataGridRow.Type;string ManufacturingNumber = "出厂编号:" + dataGridRow.ManufacturingNumber;string ManagementNumber = "管理编号:" + dataGridRow.ManagementNumber;string SubordinateDepartments = "使用部门:" + dataGridRow.SubordinateDepartments;string keeper = "保管人:" + dataGridRow.Keeper;pageIndex.Canvas.DrawString(InstrumentName, font, pen, 120, 150);pageIndex.Canvas.DrawString(Type, font, pen, 120, 165);pageIndex.Canvas.DrawString(ManufacturingNumber, font, pen, 120, 180);pageIndex.Canvas.DrawString(ManagementNumber, font, pen, 120, 195);pageIndex.Canvas.DrawString(SubordinateDepartments, font, pen, 120, 210);pageIndex.Canvas.DrawString(keeper, font, pen, 120, 225);//创建BarcodeSettings对象BarcodeSettings settings = new BarcodeSettings();//设置条码类型为二维码settings.Type = BarCodeType.QRCode;//设置二维码数据settings.Data = InstrumentName + " " + Type + " " + ManufacturingNumber + " " + ManagementNumber + " " + SubordinateDepartments +" "+keeper;设置显示文本settings.Data2D = "⠀";//设置数据类型为数字settings.QRCodeDataMode = QRCodeDataMode.Numeric;//设置二维码错误修正级别settings.QRCodeECL = QRCodeECL.H;//设置宽度settings.X = 2.0f;//初始化BarCodeGenerator对象BarCodeGenerator generator = new BarCodeGenerator(settings);//创建图片并保存为PNG格式System.Drawing.Image image = generator.GenerateImage();//加载缩放后的图片到PdfImage对象PdfImage pdfImage = PdfImage.FromImage(image);//调整图片大小int width = image.Width;int height = image.Height;float scale = 0.18f;  //缩放比例SizeF size = new SizeF(width * scale, height * scale);//设置图片位置float x = 250;float y = 150;//在指定位置绘入图片pageIndex.Canvas.DrawImage(pdfImage, new PointF(x, y), size);string filePath1 = LocalPath + "\\" + Common.Util.CommonUtils.GetUUId() + ".pdf";document.SaveToFile(filePath1);System.Diagnostics.Process.Start(filePath1);}}

打印的效果也是比较完美的。

C#实现二维码打印模板(PDF格式)相关推荐

  1. [原创]解决某物流企业二维码打印问题

    [原创]解决某物流企业二维码打印问题 参考文章: (1)[原创]解决某物流企业二维码打印问题 (2)https://www.cnblogs.com/ruochen/archive/2012/06/28 ...

  2. java生成二维码打印到浏览器

    java生成二维码打印到浏览器 解决方法: pom.xml的依赖两个jar包: <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  3. 视频教程-微信公众平台深度开发v2.0第3季——二维码、模板消息-微信开发

    微信公众平台深度开发v2.0第3季--二维码.模板消息 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考) ...

  4. 量具管理-量具生成和二维码打印

    量具管理-量具生成和二维码打印 只要选择量具分类,按下"生成新量具"按钮可以自动生成量具并能打印二维码 建立文件createclass.py # -*- coding: utf-8 -*- impor ...

  5. 生成二维码并将二维码附到pdf文件上,扫描二维码完成跳转

    依托e-iceblue工具完成 官网:https://www.e-iceblue.cn/tutorials.html 本文参考:https://www.e-iceblue.cn/pdf_java_ba ...

  6. java完整的利用itext5制作pdf、二维码图片插入pdf,并解析pdf中的二维码信息

    利用itext5.zxing.QRCore制作pdf.二维码图片插入pdf,并解析pdf中的二维码信息,手机可以实现扫描获取二维码的信息,并进行验证你的解析是否正确. 先是生成二维码图片并插入pdf中 ...

  7. 金蝶k3 wise 15.0单据序时簿二维码打印后打印预览时提示没有注册类

    金蝶K3 wise 15.0 销售出库单打开二维码打印后这个界面在点击布局设计或打印预览时提示没有注册类,提示如下: 解决方案: 请在K3安装目录C:\Program Files (x86)\King ...

  8. Android 蓝牙二维码打印,打印图片,二维码加文字布局,蓝牙连接

    蓝牙二维码打印,工厂物料条码,绝对好用 资源下载地址:点击下载 扫描,显示蓝牙列表 public class DeviceListActivity extends AppCompatActivity ...

  9. TSPL指令二维码打印无效?我搜集的TSPL中文文档

    设备:tec相关打印机 开发语言:javascript nodejs环境 TSCLIB.dll(详细资料需要去TSC官网下载,不要花RMB) 近日又在做标签打印相关,软件的开发,遇到一个以前已解决的问 ...

最新文章

  1. vim的高级用法配置以及在系统中如何获取帮助
  2. java 端口8161_ActiveMQ_Windows和Linux版本的安装部署
  3. javascript运动系列第七篇——鼠标跟随运动
  4. 乒乓球比赛赛程_10月5日至10月11日中央电视台直播录播乒乓球比赛安排
  5. SpringBoot Serverless 实战 | 监控调试
  6. buffer sort Oracle,SQL执行计划中的BUFFER SORT是什么意思呢,请高手指点.
  7. 谈谈HtmlControl与WebControl的区别与用途
  8. 法兰克焊接机器人编程入门_焊接机器人编程入门基本常识
  9. 计算机管理的服务打不开,Windows 系统服务无法打开解决方法+操作命令详解
  10. idea怎么运行c语言程序,IntelliJ IDEA 10.0 64位运行方法
  11. iapp卸载指定软件代码,iapp删除文件夹代码
  12. mvcnn代码详解_使用colab运行tensorflow版本的faster-rcnn
  13. (01背包扩展) 算法提高 金明的预算方案
  14. JVM 垃圾收集器 学习笔记(《深入理解java虚拟机》之六 垃圾收集)
  15. 如何做到推广链接的落地页链接实现无变化跳转?
  16. 【Android】第三方QQ账号登录的实现
  17. Python用turtle画爱心丘比特之剑
  18. 科技节图像后期处理二等奖作品---陪伴是最长情的告白
  19. [Gitlab CI/CD] fatal: could not read Username for ‘xxx‘: No such device or address
  20. win10装win7时Bios设置方法

热门文章

  1. 使用OpenSSL生成SSL证书的教程
  2. 使用AVPlayer实现在线音频播放注意问题
  3. 乒乓RAM基本原理和操作介绍
  4. RNA修饰质谱检测|dextran-siRNA 葡聚糖化学偶联DNA/RNA|siRNA-PLGA聚乳酸-羟基乙酸共聚物修饰核糖核酸
  5. 上反对下反对推理图_2020福建省考行测判断推理:直言命题之上下反对关系
  6. ue设置注释快捷键_UltraEdit常用快捷键大全
  7. JAVA基础-U7 面向对象编程(基础部分)-可变参数
  8. 【UE5 C++基础 02】网格体API基础
  9. 代码技巧——dubbo泛化调用
  10. 2014年2月7日-2月17日,(36小时,剩4646)