winfrom生成二维码,参考:https://blog.csdn.net/djk8888/article/details/87859089
拼接两张图片,参考原文:https://blog.csdn.net/yanxiaozai/article/details/83148417 (感谢!)
简单打印图片,参考原文:https://www.cnblogs.com/wuhuisheng/archive/2011/11/09/2243055.html (感谢!)
给图片添加水印(标签),原文:http://blog.sina.com.cn/s/blog_6f7a7fb5010170ah.html (感谢!)

需求描述:斑马Gk888t打印机,打印二维码,一次打印打1~3张二维码(一行最多3个)
思路:把2~3张二维码的图片,拼接在一张图上,打印该图即可

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ThoughtWorks.QRCode.Codec;namespace JYMS
{public partial class Frm3In1FixedAssetsQr : Form{public List<string> fidList;public Frm3In1FixedAssetsQr(){InitializeComponent();}private void Frm3In1FixedAssetsQr_Load(object sender, EventArgs e){CreateQRcode();}//批量生成二维码private void CreateQRcode(){if (fidList != null && fidList.Any()){try{#region 生成二维码if (fidList.Count == 1)//打印1个,至少打印1个{Bitmap map1 = CreateQRcode(fidList[0]);//图1picQRcode.Image = map1;}else if (fidList.Count == 2)//打印2个{Bitmap map1 = CreateQRcode(fidList[0]);//图1Bitmap map2 = CreateQRcode(fidList[1]);//图2picQRcode.Image = StitchingImages(map1, map2);//图1+图2}else if (fidList.Count == 3)//打印3个,最多打印3个{Bitmap map1 = CreateQRcode(fidList[0]);//图1Bitmap map2 = CreateQRcode(fidList[1]);//图2Bitmap map3 = CreateQRcode(fidList[2]);//图3Bitmap temp1 = StitchingImages(map1, map2);//图1+图2=图4Bitmap temp2 = StitchingImages(temp1, map3);//图4+图3picQRcode.Image = temp2;//图1+图2+图3}#endregionPrint();//打印二维码}catch (Exception ex)//一般是字符串超出长度的极限报错:索引超出了数组的极限{MessageBox.Show(ex.ToString());}}else{DialogResult = DialogResult.No;}}/// <summary>/// 生成二维码/// </summary>/// <param name="fid">固定资产号</param>public Bitmap CreateQRcode(string fid){QRCodeEncoder Encoder = new QRCodeEncoder();Encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//二维码类型Encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;//容错程度(H:高)Encoder.QRCodeScale = 2;//像素点大小,1~3推荐Encoder.QRCodeVersion = 0;//0:自动判断字符串长度,有最大的极限,太长会报错//关键,用QRCodeEncoder内部Encode加密Bitmap image = Encoder.Encode("http://192.168.8.88:8026/FixedAssets/items.aspx?fid=" + fid);//本地测试MemoryStream MStream = new System.IO.MemoryStream();image.Save(MStream, System.Drawing.Imaging.ImageFormat.Gif);//return image;return Watermark(image, "资产号:" + fid.PadLeft(6,'0'));//添加文字水印}/// <summary>/// 图片底部添加水印:固定资产编号/// </summary>/// <param name="map1">原图</param>/// <param name="text">文字</param>/// <param name="space">水印高度</param>/// <returns></returns>public Bitmap Watermark(Bitmap map1, String text, int space = 15){Image img1 = map1;var width = img1.Width;var height = img1.Height + space;//新图片高度=原图片高度+水印高度Bitmap bitMap = new Bitmap(width, height);Graphics g = Graphics.FromImage(bitMap);g.FillRectangle(Brushes.White, new Rectangle(0, 0, width, height));g.DrawImage(map1, 0, 0, img1.Width, img1.Height);Font font = new Font("微软雅黑", 8);//文字字体,大小Brush brush = new SolidBrush(Color.Black);//文字颜色(黑色)g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;g.DrawString(text, font, brush, 0, img1.Height + 1, StringFormat.GenericDefault);//添加文字MemoryStream MStream = new System.IO.MemoryStream();bitMap.Save(MStream, System.Drawing.Imaging.ImageFormat.Gif);return bitMap;}/// <summary>/// 拼接图片/// </summary>/// <param name="map1">图片1</param>/// <param name="map2">图片2</param>/// <param name="space">间隔留空大小</param>/// <returns></returns>public Bitmap StitchingImages(Bitmap map1, Bitmap map2, int space = 38){Image img1 = map1;Image img2 = map2;#region 这个是上下拼接//var width = Math.Max(img1.Width, img2.Width);//var height = img1.Height + img2.Height + space;#endregion#region 这个是左右拼接var width = img1.Width + img2.Width + space;var height = Math.Max(img1.Height, img2.Height);#endregion// 初始化画布(最终的拼图画布)并设置宽高Bitmap bitMap = new Bitmap(width, height);// 初始化画板Graphics g1 = Graphics.FromImage(bitMap);// 将画布涂为白色(底部颜色可自行设置)g1.FillRectangle(Brushes.White, new Rectangle(0, 0, width, height));//在x=0,y=0处画上图一g1.DrawImage(map1, 0, 0, img1.Width, img1.Height);//在x=0,y在图一往下10像素处画上图二//g1.DrawImage(map2, 0, img1.Height + space, img2.Width, img2.Height);//这个是上下拼图g1.DrawImage(map2, img1.Width + space, 0, img2.Width, img2.Height);//这个是左右拼图map1.Dispose();map2.Dispose();//Image img = bitMap;//保存return bitMap;}//直接打印,不弹出打印机对话框public void Print(){PrintDialog MyPrintDg = new PrintDialog();//MyPrintDg.Document = printDocument1;//if (MyPrintDg.ShowDialog() == DialogResult.OK)//{try{printDocument1.Print();DialogResult = DialogResult.OK;//关闭弹窗}catch (Exception ex){printDocument1.PrintController.OnEndPrint(printDocument1, new System.Drawing.Printing.PrintEventArgs());//停止打印DialogResult dr = MessageBox.Show(ex.ToString(), "提示", MessageBoxButtons.OK);if (dr == DialogResult.OK){DialogResult = DialogResult.OK;//关闭弹窗}}//}}private void btnPrintQr_Click(object sender, EventArgs e){Print();}private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e){e.Graphics.DrawImage(picQRcode.Image, 0, 0);}}
}

打印机设置:

效果图:

winfrom实现,斑马Gk888t打印机,连续打印二维码相关推荐

  1. 使用 TSC TX600 使用命令驱动打印机打印二维码

    背景:由于公司项目需要二维码扫描功能 作用:通过加密算法生成的数据使用二维码打印机打印出二维码来,贴到设备是进行识别 环境:qt create ,外部库openssl加密库 rsa加密算法    电脑 ...

  2. Java连接打印机打印二维码

    首先导入依赖 implementation 'com.google.zxing:core:3.5.1' implementation 'com.google.zxing:javase:3.5.1' 1 ...

  3. JAVA调用TSC打印机打印标签(二维码,数据等)超详细!!

    本文打印机型号: TSC MA3400P 后端调用tsc打印机是通过DLL来进行调用的,首先你需要两个TSC文件直接复制到项目目录下边即可 可以直接去官网下载:https://www.chinatsc ...

  4. android连接打印机打印二维码

    打印机打印出来的二维码是一张图,所以要得到img文件的图片流,不是文本流,下面是将流进行了转换: code: package org.fdcch.iotserver.persenter;import ...

  5. C#实现生成(条码/二维码)

    winfrom窗体实现生成(条码/二维码) 程子 orange of backroom 2月22日 一码在手,天下我有 如今是二维码遍地的时代,扫一扫方便了大家的生活,今天我们就用C#在winfrom ...

  6. 如何制作电力巡检常用的导航定位二维码?

    电力设备巡检的过程中,由于设备种类多.数量大.地区分散等因素,使得巡检效率不高,容易漏检.而在电力设备上贴一个可以定位导航的二维码,方便巡检,提高电力人员的效率,也确保设备的巡检准确性. 如何制作上面 ...

  7. Android打印二维码对热敏打印机的适配

    经过一段时间的研究,目前得出了Android连接蓝牙打印机打印二维码的方式有2种: 第一种:采用ESC/POS二维码指令打印的方式打印,代码如下 /*** 设置二维码大小*/public static ...

  8. python——生成带logo的二维码图片并且保存、控制打印机打印图片二维码、整合打印(获取输入框的值)、打包成exe文件

    1.生成带logo的二维码图片并且保存 前提条件:在D盘里有logo.png的图片,生成的二维码图片在D盘里的111.png import qrcode from PIL import Image# ...

  9. 斑马打印机测试demo,一维码、二维码、字符串。可以保存创建模板以便于后续使用

    利用RawPrinterHelper和Smt.Zebra两种方式进行打印控制 using Smt.Zebra; using System; using System.Collections.Gener ...

  10. 斑马GK888T打印机跑纸(打印半张以及闪红灯)解决办法

    斑马GK888T打印机跑纸(打印半张以及闪红灯)解决办法 型号为GK888T,每次打印条码到第二张或者后面几张就会卡纸,然后打印机复位按钮闪红灯,打印机停止工作,此时必须关了重开打印机然后打一张又是上 ...

最新文章

  1. 还在学JVM?我都帮你总结好了(附脑图)
  2. 数字人民币明确不采用区块链技术,对数字货币投资须保持警惕
  3. 0421 版本适配和本地化
  4. 2021年中国药店创新趋势报告
  5. Java字节码深入解析
  6. 树莓派3B+编译OpenCV3.4.3详细步骤
  7. SAP FICO 固定资产会计 功能详解
  8. 车机鸿蒙系统 车型,华为鸿蒙车机系统提前曝光!首发车型是它?
  9. 分体式水晶头_六类水晶头的接线方法(分体式安装图解)
  10. 无线信道的特征——衰落通识介绍
  11. 职场新人入门指南(干货)
  12. 人脸识别最低像素_人脸识别新利器:让你在50米内无处遁逃
  13. 接着说tableview的tableheadview
  14. 既然彼此不能相濡以沫, 那就相忘于江湖吧.
  15. kubernetes / K8s 初始化失败问题
  16. 1Password 7.3.2 强大的密码管理器
  17. 软件工程和计算机科学排名,计算机科学与技术与软件工程专业排名(15页)-原创力文档...
  18. 计算机网络连接显示678是什么意思,网络连接错误678什么意思 网络连接错误678解决方法【图文】...
  19. 使用bat脚本运行jar程序 cmd下解决乱码问题
  20. 【学术会议】如何rebuttal学术论文?

热门文章

  1. 【perl脚本】perl one line的几个有趣实例1
  2. .net reactor 学习系列(五)---.net reactor针对De4Dot脱壳工具的应对
  3. java+整合handwrite_Java
  4. 《图书管理系统》—需求分析报告
  5. 计算机基础access2010实训,大学计算机基础access实验.doc
  6. access转换MySQL教程,如何将Access数据库转换为SQL Server
  7. 【Android智能硬件开发】【009】安卓读写GPIO
  8. 使用Eclipse设置java源代码 连接
  9. 博客搬家工具c/s实现方式
  10. Unity3D利用代码生成脚本模板