using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
//using System.Windows.Forms;
namespace PrintSolution.LabelPrinter
{
public class ZebraPrinter : ZPL2Command
{
/******************* 标签位置 ***********************/
int blankOffset = 5; //边界宽带 单位:mm
int labBoxLen1 = 26; //左边标签盒长度 单位:mm
int labBoxLen2 = 29; //右边标签盒长度 单位:mm
int fillBoxLen1 = 58; //左边填充盒长度 单位:mm
int fillBoxLen2 = 60; //右边填充盒长度 单位:mm
int rowHeight = 11; //行高 单位:mm
int labHeadLen = 173; //标签头长度 单位:mm
int labHeadWith = 29; //标签头宽带 单位:mm
int offsetY = 0; //X坐标偏移量 单位:mm
int offsetX = 0; //Y坐标偏移量 单位:mm
int version = 2; //标签版本 1: 横向版本, 2: 纵向版本
/******************* 可变参数 ***********************/
string strCmd = ""; // 指令
int xPos = 0; // X坐标
int yPos = 0; // Y坐标
int rowNum = 0; // 字段行数
/******************* 可变参数 ***********************/
///
/// 构造函数
///
public ZebraPrinter() : base()
{
initLabelSetting();
}
///
/// 构造函数
///
public ZebraPrinter(string ipAddr) : base(ipAddr)
{
Addr = ipAddr;
initLabelSetting();
}
///
/// 标签版本属性
///
public int LableVersion
{
get
{
return version;
}
set
{
version = value;
}
}
///
/// 变量初始化
///
public void initLabelSetting()
{
blankOffset = 5; //mm
labBoxLen1 = 26; //mm
labBoxLen2 = 29; //mm
fillBoxLen1 = 58; //
fillBoxLen2 = 60; //
rowHeight = 11;
labHeadLen = 173;
labHeadWith = 29;
offsetY = 0;
offsetX = 0;
// 指令初始化
strCmd = ""; // 指令
xPos = 0; // X坐标
yPos = 0; // Y坐标
rowNum = 0; // 字段行数
//
FontDirect = 'B';
// 设定坐标偏移量
switch (version)
{
case 1:
offsetX = 5;
offsetY = 3;
break;
case 2:
offsetX = 0;
offsetY = -2;
break;
default:
offsetX = 0;
offsetY = -1;
break;
}
}
///
/// 打印标签的一行数据
///
/// 左边格子中的数据
/// 右边格子中的数据
private void printLine(string leftData, string rightData)
{
switch (version)
{
case 1:
// 打印左边的数据
xPos = (blankOffset + labBoxLen1 + offsetX) * getDotMM();
yPos = (blankOffset + labHeadWith + offsetY) * getDotMM() + rowNum * rowHeight * getDotMM();
strCmd += fillDataCmd(xPos, yPos, leftData);
// 打印右边的数据, Y 坐标不变
xPos = (blankOffset + labBoxLen1 + fillBoxLen1 + labBoxLen2 + offsetX) * getDotMM();
strCmd += fillDataCmd(xPos, yPos, rightData);
break;
case 2:
xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * getDotMM() + fontHeight;
yPos = (blankOffset + offsetY) * getDotMM() + fillBoxLen2 * getDotMM() - getStringDots(rightData); //fillBoxLen2
strCmd += getFontCmd() + fillDataCmd(xPos, yPos, rightData);
// X 坐标不变
//xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetX) * dotsMm +fontHeight ;
yPos = (blankOffset + fillBoxLen2 + labBoxLen2 + offsetY) * getDotMM() + fillBoxLen1 * getDotMM() - getStringDots(leftData);//
strCmd += getFontCmd() + fillDataCmd(xPos, yPos, leftData);
break;
}
rowNum++;
}
///
/// 打印条码
///
/// 条码数据项
private void printBarcode(string data)
{
//int codeHeight = 150;
int offset = 5;
string orientation = "B"; // N = 正常 (Normal);R = 顺时针旋转90度(Roated);I = 顺时针旋转180度(Inverted);B = 顺时针旋转270度 (Bottom)
switch (version)
{
case 1:
xPos = (offset + blankOffset )* getDotMM();
yPos = (blankOffset + labHeadWith + rowNum * rowHeight + offsetY) * getDotMM();
orientation = "N";
strCmd += getBarcodeCmd(xPos, yPos, orientation, data);
break;
case 2:
xPos = (blankOffset + labHeadWith + rowNum * rowHeight + offset) * getDotMM();//+ barcodeHeight
yPos = labHeadLen * getDotMM() - data.Length * fontWidth; //(rowY + offsetY) * dotsMm + rowNum * rowHeight * dotsMm;
orientation = "B";
strCmd += getBarcodeCmd(xPos, yPos, orientation, data);
break;
}
}
///
/// 打印标签
///
/// 标签内容
public void printLable(ColdCoilLable coilLabel)
{
initLabelSetting();
strCmd += getBeginCmd();
if(1 == version)strCmd += getDefaultFontCmd();
printLine(coilLabel.rollNo, coilLabel.specification);
printLine(coilLabel.coilNo, coilLabel.steelGrade);
printLine(coilLabel.heatNo, coilLabel.dimension);
printLine(coilLabel.contractNo, coilLabel.weight);
printLine(coilLabel.prodDate, coilLabel.checker);
printLine(coilLabel.licenseNo, coilLabel.licenseMark);
printBarcode(coilLabel.barcode);
strCmd += getEndCmd();
sendCommand(strCmd);
}
///
/// 测试函数
///
public void test()
{
ColdCoilLable coilLabel = new ColdCoilLable();
coilLabel.rollNo = "L1-017355-10";
coilLabel.specification = "GB2009-2011XGSPC";
coilLabel.steelGrade = "SPCC";
coilLabel.dimension = "1.8*1205";
coilLabel.coilNo = "L1-017355-10AA0";
coilLabel.weight = "28050";
coilLabel.heatNo = "J12-56790A";
coilLabel.prodDate = DateTime.Now.ToString("yyyyMMddhhmmss");
coilLabel.contractNo = "532011080001";
coilLabel.licenseNo = "E532011";
coilLabel.licenseMark = "XGHG";
coilLabel.checker = "";
coilLabel.barcode = coilLabel.coilNo;
printLable(coilLabel);
}
}
}