使用的是芝柯打印机,无驱动,除了文本打印外,若想打印其他表格或者模板,我的做法是利用excel填充数据,然后转换为pdf,pdf再转为zpl命令。
#region 二维码 //实例一个对象,配置二维码的参数 var qR = new BarcodeWriter { //类型,QRCODE二维码,下面的条形码也是一样的,不知道类型百度一下 Format = BarcodeFormat.QR_CODE }; // 设置生成的二维码的一些参数(可选) EncodingOptions encodingOptions = new() { Width = 120, // 宽度 Height = 120, // 高度 Margin = 0 // 边距 }; qR.Options = encodingOptions; //填充数据 Bitmap qrBitmap = qR.Write(datas[i].ID); // 将 Bitmap 转换为文件流(这里是epplus插入图片的方式,其他操作excel组件自行修改) using (MemoryStream qrStream = new()) { //保存进文件流 qrBitmap.Save(qrStream, System.Drawing.Imaging.ImageFormat.Png); //wb是一个Worksheet工作簿,往里面添加图片 var qrImg = wb.Drawings.AddPicture("QR", qrStream); //图片的位置,四个参数(行,偏移量,列,偏移量)注意点在于,设置了第一行第一列,图片的位置会从右下角开始 qrImg.SetPosition(22, 0, 6, 0); } #endregion 二维码 #region 条形码 var writer = new BarcodeWriter { Format = BarcodeFormat.CODE_128 }; QrCodeEncodingOptions options = new() { DisableECI = true, CharacterSet = "UTF-8", Width = 180, Height = 90, Margin = 1 }; writer.Options = options; Bitmap zx = writer.Write($"{datas[i].WAREID ?? "0000"}"); //插入二维码 using (MemoryStream stream = new()) { zx.Save(stream, System.Drawing.Imaging.ImageFormat.Png); var zximg = wb.Drawings.AddPicture("zx", stream); zximg.SetPosition(9, 0, 2, 0); } #endregion 条形码
PDFtoZPL。国外大神搞得一个转换zpl命令的包。zpl挺难搞的,主要是不懂。只能借用别人写好的了,目前这个包是我认为最简单操作的了。不过只能从PDF转换
#region 转换为ZPL命令 //加载pdf路径,转换成Base64字符串 byte[] pdfBytes = File.ReadAllBytes(pdfPath); string base64String = Convert.ToBase64String(pdfBytes); // 设置标签尺寸(单位:点,1英寸 = 203点) int labelWidthDots = 5 * 203; // 宽度为4.5英寸 int labelHeightDots = (int)(7.5 * 203); // 高度为6英寸 var zplCode = PDFtoZPL.Conversion.ConvertPdf(base64String, width: labelWidthDots, height: labelHeightDots); //保存zpl指令 string zpl = string.Empty; foreach (var str in zplCode) { zpl += str; } #endregion // 将字符串转换为 GBK 编码的字节数组 if (zpl.Length != 0) if (zpl.LastIndexOf('\n') != zpl.Length - 1) zpl += "\n"; byte[] byteData = System.Text.Encoding.GetEncoding("GBK").GetBytes(zpl);
/// <summary> /// Excel转换Pdf /// </summary> /// <param name="xlsPath">输入excel地址</param> /// <param name="pdfPath">输出pdf地址</param> public static string ToPDF(string xlsPath, string pdfPath = null) { pdfPath ??= xlsPath.Replace("xlsx", "pdf"); //加载模板 Workbook wb = new(); wb.LoadFromFile(xlsPath); //转换成PDF Worksheet ws = wb.Worksheets[0]; ws.SaveToPdf(pdfPath); return pdfPath; }