package com.ZMPrinter.Demo;

import com.ZMPrinter.*;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class PrintViaNet_Demo_UHF {
    public static void main(String[] args) throws InterruptedException {

        //region 定义打印机对象
        zmprinter thiszmprinter = new zmprinter();//定义打印机对象
        thiszmprinter.printerinterface= printerstyle.RFID_NET;//打印机接口类型
        thiszmprinter.printerdpi = 300;//打印机分辨率，203dpi、300dpi或600dpi
        thiszmprinter.printSpeed=4;//打印速度，赋值范围2~8，单位是英寸/秒
        thiszmprinter.printDarkness=12;//打印黑度，赋值范围0~20，值越大打印头加热时间越长。一般使用蜡质碳带赋值7~12，树脂碳带赋值12~18
        thiszmprinter.printernetip = "192.168.8.180";//打印机的ip地址，端口号可以不设置，默认是9100
        //endregion

        //region 定义标签对象
        zmlabel thiszmlabel = new zmlabel();//定义标签对象
        thiszmlabel.labelwidth = 98;//标签的宽度，单位是mm
        thiszmlabel.labelheight = 24;//标签的高度，单位是mm
        thiszmlabel.labelrowgap = 2;//标签之间的行间距，单位是mm
        //endregion

        //region 定义标签内需要打印的各个对象（一个标签上可以有多个对象，如文字、一维条码、二维条码、线条、矩形、图片、RFID写入数据等）
        List<zmlabelobject> thiszmlabelobjectlist = new ArrayList<>();//定义标签上需要打印的对象列表

        zmlabelobject thiszmlabelobject01 = new zmlabelobject();
        thiszmlabelobject01.objectName = "truetype";//该对象是TrueType文字
        thiszmlabelobject01.objectdata = "名称：三七";//文字内容
        thiszmlabelobject01.Xposition = 5;//文字X坐标，单位mm
        thiszmlabelobject01.Yposition = 4;//文字Y坐标，单位mm
        thiszmlabelobject01.textfont = "黑体";//文字的字体
        thiszmlabelobject01.fontstyle = 0;//粗体
        thiszmlabelobject01.fontsize = 12;//文字的字号
        thiszmlabelobjectlist.add(thiszmlabelobject01);//将文字对象添加进对象列表

        zmlabelobject thiszmlabelobject02 = new zmlabelobject();
        thiszmlabelobject02.objectName = "truetype";//该对象是TrueType文字
        thiszmlabelobject02.objectdata = "规格：特级20头";//文字内容
        thiszmlabelobject02.Xposition = 5;//文字X坐标，单位mm
        thiszmlabelobject02.Yposition = 11;//文字Y坐标，单位mm
        thiszmlabelobject02.textfont = "黑体";//文字的字体
        thiszmlabelobject02.fontstyle = 0;//粗体
        thiszmlabelobject02.fontsize = 12;//文字的大小
        thiszmlabelobjectlist.add(thiszmlabelobject02);//将文字对象添加进对象列表

        zmlabelobject thiszmlabelobject03 = new zmlabelobject();
        thiszmlabelobject03.objectName = "truetype";//该对象是TrueType文字
        thiszmlabelobject03.objectdata = "数量：10公斤/袋";//文字内容
        thiszmlabelobject03.Xposition = 5;//文字X坐标，单位mm
        thiszmlabelobject03.Yposition = 18.5f;//文字Y坐标，单位mm
        thiszmlabelobject03.textfont = "黑体";//文字的字体
        thiszmlabelobject03.fontstyle = 0;//粗体
        thiszmlabelobject03.fontsize = 12;//文字的大小
        thiszmlabelobjectlist.add(thiszmlabelobject03);//将文字对象添加进对象列表


        zmlabelobject thiszmlabelobject04 = new zmlabelobject();
        thiszmlabelobject04.objectName = "truetype";//该对象是TrueType文字
        thiszmlabelobject04.objectdata = "入库单号：TH2209270001";//文字内容
        thiszmlabelobject04.Xposition = 45;//文字X坐标，单位mm
        thiszmlabelobject04.Yposition = 4;//文字Y坐标，单位mm
        thiszmlabelobject04.textfont = "黑体";//文字的字体
        thiszmlabelobject04.fontstyle = 0;//粗体
        thiszmlabelobject04.fontsize = 12;//文字的字号
        thiszmlabelobjectlist.add(thiszmlabelobject04);//将文字对象添加进对象列表

        zmlabelobject thiszmlabelobject05 = new zmlabelobject();
        thiszmlabelobject05.objectName = "truetype";//该对象是TrueType文字
        thiszmlabelobject05.objectdata = "标签ID：BQ2207270002";//文字内容
        thiszmlabelobject05.texttextalign = 0;//0为左对齐，1为居中，2为右对齐
        thiszmlabelobject05.texttextvalign = 0;//0为顶边对齐，1为垂直居中，2为底边对齐
        thiszmlabelobject05.Xposition = 45;//文字X坐标，单位mm
        thiszmlabelobject05.Yposition = 11;//文字Y坐标，单位mm
        thiszmlabelobject05.textfont = "黑体";//文字的字体
        thiszmlabelobject05.fontstyle = 0;//粗体
        thiszmlabelobject05.fontsize = 12;//文字的大小
        thiszmlabelobjectlist.add(thiszmlabelobject05);//将文字对象添加进对象列表

        zmlabelobject thiszmlabelobject06 = new zmlabelobject();
        thiszmlabelobject06.objectName = "truetype";//该对象是TrueType文字
        thiszmlabelobject06.objectdata = "产   地：云南";//文字内容
        thiszmlabelobject06.Xposition = 45;//文字X坐标，单位mm
        thiszmlabelobject06.Yposition = 18.5f;//文字Y坐标，单位mm
        thiszmlabelobject06.textfont = "黑体";//文字的字体
        thiszmlabelobject06.fontstyle = 0;//粗体
        thiszmlabelobject06.fontsize = 12;//文字的大小
        thiszmlabelobjectlist.add(thiszmlabelobject06);//将文字对象添加进对象列表


        zmlabelobject thiszmlabelobject07 = new zmlabelobject();
        thiszmlabelobject07.objectName = "rfiduhf";//该对象是RFID写入
        thiszmlabelobject07.objectdata = "12345678";//RFID需要写入的内容
        thiszmlabelobject07.RFIDDatablock = 0;//写入区域，0为EPC，1为USER
        thiszmlabelobject07.RFIDDatatype = 1;//数据类型：0为文本，1为16进制
        thiszmlabelobject07.RFIDerrortimes = 1;//错误重试次数
        thiszmlabelobjectlist.add(thiszmlabelobject07);//将RFID对象添加进对象列表

        //endregion

        //region 打印标签
        long barcodesn = 210900030001L;//文字、条码及EPC的数据
        printutility zmprintoperate = new printutility();//定义打印操作对象

        for(int pnum=1;pnum<=1;pnum++) {
            System.out.println("打印第"+pnum+"张");

            //region 检查打印机状态
            if(!zmprintoperate.CheckNetPrinterStatus(thiszmprinter))
            {
                System.out.println("打印机状态异常，请检查。");
                return;
            }
            //endregion

            //region 更改标签内指定文字、条码或RFID写入数据的内容
            thiszmlabelobject01.objectdata="名称：三七"+Long.toString(barcodesn);//更改thiszmlabelobject01对象的objectdata内容
            thiszmlabelobject07.objectdata=Long.toString(barcodesn);//更改thiszmlabelobject07对象的objectdata内容
            //endregion

            //region 根据标签上需要打印的对象列表生成打印数据
            byte[] zmpclecommand = zmprintoperate.CreateLabelCommand(thiszmprinter, thiszmlabel, thiszmlabelobjectlist);//生成标签数据
            if (zmpclecommand == null) {
                System.out.println("生成标签数据异常为空.");
                return;
            }
            //endregion

            //region 发送打印数据给打印机
            zmprintoperate.PrintLabelCommandbyNet(thiszmprinter, zmpclecommand);//发送数据给打印机
            Thread.sleep(3000);//等待打印完成，根据打印速度和标签高度估算打印时间。如果网络打印，那么需要根据网络路由延迟加大等待时间
            System.out.println(pnum+"张打印完成");
            //endregion

            barcodesn++;//序号加1
        }
        //endregion
    }
}
