diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml
new file mode 100644
index 00000000..385c6baf
--- /dev/null
+++ b/.idea/jsLibraryMappings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 3647c99c..3354b310 100644
--- a/pom.xml
+++ b/pom.xml
@@ -214,6 +214,22 @@
2.8.8
+
+
+
+ net.java.dev.jna
+ jna
+ 5.5.0
+
+
+
+
+ com.profesorfalken
+ WMI4Java
+ 1.6.3
+
+
+
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/ENS/ENS.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/ENS/ENS.java
new file mode 100644
index 00000000..848b2833
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/ENS/ENS.java
@@ -0,0 +1,10 @@
+package com.dreamchaser.depository_manage.EPSON.ENS;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+
+public class ENS {
+
+ protected Pointer _ptrToStruct = new Memory(10);
+ private boolean _disposed = false;
+}
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/ENS/ENSEnumrations.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/ENS/ENSEnumrations.java
new file mode 100644
index 00000000..9cca9feb
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/ENS/ENSEnumrations.java
@@ -0,0 +1,341 @@
+package com.dreamchaser.depository_manage.EPSON.ENS;
+
+import sun.management.snmp.jvmmib.EnumJvmMemPoolThreshdSupport;
+
+/**
+ * 用于ENS相关的枚举类
+ */
+public class ENSEnumrations {
+
+
+ /**
+ * 用于ENS错误码的枚举
+ */
+ public enum ENSErrorCode
+ {
+ ERR_BASE (0),
+ ERR_PARAMETER (ERR_BASE.getI()- 1), //Values of necessary arguments have not been set.
+ ERR_INITIALIZE (ERR_BASE.getI()- 2), //Failure in initialization of bi-directional communication module.
+ //Or API has not been initialized.
+ ERR_NOTSUPPORT (ERR_BASE.getI()- 3), //Error before the start of communication (i.e. a port specification error etc.).
+ //Or other error occurred in bi-directional communication module.
+ ERR_PRINTER (ERR_BASE.getI()- 4), //Printer has not been registered
+ ERR_NOTFOUND (ERR_BASE.getI()- 5), //Communication cannot be opened.
+ //Communication trouble. Or there is no device information which can be acquired.
+ ERR_BUFFERSIZE (ERR_BASE.getI()- 6), //Specified buffer size value is too small.
+ ERR_TEMPORARY (ERR_BASE.getI()- 7), //Temporary storage memory used in API cannot be secured.
+ ERR_COMMUNICATION (ERR_BASE.getI()- 8), //Communication error occurred inside system of bi-directional communication module.
+ ERR_INVALIDDATA (ERR_BASE.getI()- 9), //Data acquired by API contains invalid code, so data is not reliable.
+ ERR_CHANNEL (ERR_BASE.getI()- 10), //No usable communication channel for packet transmission/reception.
+ ERR_HANDLE (ERR_BASE.getI()- 11), //Handle of specified bi-directional communication module is invalid.
+ ERR_BUSY (ERR_BASE.getI()- 12), //Port could not be opened while printer is printing (communicating).
+ ERR_LOADDLL (ERR_BASE.getI()- 13), //Failure in loading bi-directional communication module.
+ ERR_DEVICEID (ERR_BASE.getI()- 14), //Specified DeviceID information is invalid.
+ ERR_PRNHANDLE (ERR_BASE.getI()- 15), //Specified printer handle is invalid.
+ ERR_PORT (ERR_BASE.getI()- 16), //Unsupported printer path name was specified.
+ ERR_TIMEOUT (ERR_BASE.getI()- 17), //Receive processing stopped due to a time out.
+ ERR_JOB1 (ERR_BASE.getI()- 18), //Job management error No. 1.
+ ERR_JOB2 (ERR_BASE.getI()- 19), //Job management error No. 2.
+ ERR_JOB3 (ERR_BASE.getI()- 20), //Job management error No. 3.
+ ERR_INVALIDHANDLE ( ERR_BASE.getI()- 21),//Specified discovery handle is invalid.
+ ERR_USERCANCEL (ERR_BASE.getI()- 22), //Discovery was canceled by user.
+ ERR_THREADSTART (ERR_BASE.getI()- 23), //Failed in starting thread.
+ ERR_TRAPRESOURCE ( ERR_BASE.getI()- 24), //Insufficient trap resource.
+ ERR_SERVICE ( ERR_BASE.getI()- 25), //Core service error.
+ ERR_JOBNOTSUPPORT ( ERR_BASE.getI()- 26),//Job management function is not supported.
+ ERR_TRAPNOTSUPPORT ( ERR_BASE.getI()- 27), //Trap function is not supported.
+ ERR_SETTRAP ( ERR_BASE.getI()- 28), //Trap setting failure.
+ ERR_NOTRAPDATA ( ERR_BASE.getI()- 29), //No Trap notification data.
+ ERR_GSTNOTSUPPORT ( ERR_BASE.getI()- 30),//Unsupported general status.
+ ERR_OTHER ( - 31); //Other error;
+
+ private int i;
+ ENSErrorCode(int i) {
+ this.i = i;
+ }
+ public int getI() {
+ return i;
+ }
+
+ /**
+ * 用于获取对应的枚举值
+ * @return
+ */
+ public static ENSErrorCode getENSErrorCode(int i){
+ switch (i) {
+ case 0:
+ return ERR_PARAMETER;
+ case -1:
+ return ERR_PARAMETER;
+ case -2:
+ return ERR_INITIALIZE;
+ case -3:
+ return ERR_NOTSUPPORT;
+ case -4:
+ return ERR_PRINTER;
+ case -5:
+ return ERR_NOTFOUND;
+ case -6:
+ return ERR_BUFFERSIZE;
+ case -7:
+ return ERR_TEMPORARY;
+ case -8:
+ return ERR_COMMUNICATION;
+ case -9:
+ return ERR_INVALIDDATA;
+ case -10:
+ return ERR_CHANNEL;
+ case -11:
+ return ERR_HANDLE;
+ case -12:
+ return ERR_BUSY;
+ case -13:
+ return ERR_LOADDLL;
+ case -14:
+ return ERR_DEVICEID;
+ case -15:
+ return ERR_PRNHANDLE;
+ case -16:
+ return ERR_PORT;
+ case -17:
+ return ERR_TIMEOUT;
+ case -18:
+ return ERR_JOB1;
+ case -19:
+ return ERR_JOB2;
+ case -20:
+ return ERR_JOB3;
+ case -21:
+ return ERR_INVALIDHANDLE;
+ case -22:
+ return ERR_USERCANCEL;
+ case -23:
+ return ERR_THREADSTART;
+ case -24:
+ return ERR_TRAPRESOURCE;
+ case -25:
+ return ERR_SERVICE;
+ case -26:
+ return ERR_JOBNOTSUPPORT;
+ case -27:
+ return ERR_TRAPNOTSUPPORT;
+ case -28:
+ return ERR_SETTRAP;
+ case -29:
+ return ERR_NOTRAPDATA;
+ case -30:
+ return ERR_GSTNOTSUPPORT;
+ case -31:
+ return ERR_OTHER;
+ default:
+ return null;
+ }
+ }
+
+ }
+
+ /**
+ * 用于ENS类型的枚举
+ */
+ public enum ENSType //Printer path type
+ {
+ TYPE_PORT (0), //Port
+ TYPE_PRINTER (1), //Printer registration name
+ TYPE_IPX (2); //IPX
+
+
+ private int i;
+ ENSType(int i) {
+
+ this.i = i;
+ }
+ public int getI() {
+ return i;
+ }
+ }
+
+
+ /**
+ * 用于ENS路径类型的枚举
+ */
+ public enum ENSPathType
+ {
+ TYPE_EJL (0), //Printer compatible with EJL commands (Page printer)
+ TYPE_REMOTE (1), //Printer compatible with remote commands (INK/SIDM printer)
+ TYPE_UNKNOWN (100); //Type cannot be determined.
+
+ private int i;
+
+ ENSPathType(int i) {
+ this.i = i;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+ /**
+ * 用于获取对应的枚举值
+ * @param i
+ * @return
+ */
+ public static ENSPathType getENSPathType(int i){
+ switch (i){
+ case 0:
+ return TYPE_EJL;
+ case 1:
+ return TYPE_REMOTE;
+ case 100:
+ return TYPE_UNKNOWN;
+ default:
+ return null;
+ }
+ }
+ }
+
+
+ //------------------------------------
+ //Definitions Printer StateCode for TM-C3400/TM-C3500/TM-C7500 (printer type).
+ //Please add StatusCode which are not being defined.
+ //Some value that is not being defined in enum by specification change of SDK may be returned.
+ //Refer SDK specifications for the latest definition.
+ //------------------------------------
+ public enum StatusCode
+ {
+ ST_Error (0x00 ),
+ ST_TestPrint (0x01 ),
+ ST_Busy (0x02 ),
+ ST_Wait (0x03 ),
+ ST_Idle (0x04 ),
+ ST_NotPrint (0x05 ),
+ ST_Inkdrying (0x06 ),
+ ST_Cleaning (0x07 );
+
+ private int i;
+ StatusCode(int i) {
+ this.i = i;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+ /**
+ * 用于获取对应的枚举值
+ * @param i
+ * @return
+ */
+ public static StatusCode getStatusCode(int i){
+ switch (i){
+ case 0x00:
+ return ST_Error;
+ case 0x01:
+ return ST_TestPrint;
+ case 0x02:
+ return ST_Busy;
+ case 0x03:
+ return ST_Wait;
+ case 0x04:
+ return ST_Idle;
+ case 0x05:
+ return ST_NotPrint;
+ case 0x06:
+ return ST_Inkdrying;
+ case 0x07:
+ return ST_Cleaning;
+ default:
+ return null;
+ }
+ }
+ }
+
+ //------------------------------------
+ //Definitions Printer ErrorCode for TM-C3400/TM-C3500/TM-C7500 (printer type).
+ //Please add ErrorCode which are not being defined.
+ //Some value that is not being defined in enum by specification change of SDK may be returned.
+ //Refer SDK specifications for the latest definition.
+ //------------------------------------
+ public enum ErrorCode
+ {
+ ERR_FatalError (0x00 ),
+ ERR_CoverOpen (0x02 ),
+ ERR_PaperJam (0x04 ),
+ ERR_Inkout (0x05 ),
+ ERR_Paperout (0x06 );
+
+ private int i;
+ ErrorCode(int i) {
+ this.i = i;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+ /**
+ * 用于获取对应的枚举值
+ * @param i
+ * @return
+ */
+ public static ErrorCode getErrorCode(int i){
+ switch (i){
+ case 0x00:
+ return ERR_FatalError;
+ case 0x02:
+ return ERR_CoverOpen;
+ case 0x04:
+ return ERR_PaperJam;
+ case 0x05:
+ return ERR_Inkout;
+ case 0x06:
+ return ERR_Paperout;
+ default:
+ return null;
+ }
+ }
+ }
+
+ //------------------------------------
+ //Definitions Printer WarningCode for TM-C3400/TM-C3500/TM-C7500 (printer type).
+ //Please add WarningCode which are not being defined.
+ //Some value that is not being defined in enum by specification change of SDK may be returned.
+ //Refer SDK specifications for the latest definition.
+ //------------------------------------
+ public enum WarningCode
+ {
+ WAR_InkLow_B (0x010 ),
+ WAR_InkLow_C (0x011 ),
+ WAR_InkLow_M (0x012 ),
+ WAR_InkLow_Y (0x013 );
+
+ private int i;
+ WarningCode(int i) {
+ this.i = i;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+ /**
+ * 用于获取对应的枚举值
+ * @param i
+ * @return
+ */
+ public static WarningCode getWarningCode(int i){
+ switch (i){
+ case 0x010:
+ return WAR_InkLow_B;
+ case 0x011:
+ return WAR_InkLow_C;
+ case 0x012:
+ return WAR_InkLow_M;
+ case 0x013:
+ return WAR_InkLow_Y;
+
+ default:
+ return null;
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/ENS/ENSStatus.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/ENS/ENSStatus.java
new file mode 100644
index 00000000..233fbc84
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/ENS/ENSStatus.java
@@ -0,0 +1,231 @@
+package com.dreamchaser.depository_manage.EPSON.ENS;
+
+import com.dreamchaser.depository_manage.config.EPSON.ENS.Global_MEDIA_ENS;
+import com.dreamchaser.depository_manage.config.EPSON.EPDM.Global_MEDIA_EPDM;
+import com.sun.jna.Memory;
+import com.sun.jna.Structure;
+
+public class ENSStatus extends ENS{
+
+ public class STATUSVERSION extends Structure
+ {
+ public short MajorVersion;
+ public short MinerVersion;
+ }
+
+ public class PAPERPATHINFO extends Structure
+ {
+ public byte Type;
+ public byte Path;
+ }
+
+ public class CHARASTATUSINFO01 extends Structure
+ {
+ public byte Version;
+ public int StartDate;
+ public int TotalPrintedLine;
+ public short TotalTime;
+ public short CSFBin1PaperSize;
+ public short CSFBin2PaperSize;
+ public short CSFBin3PaperSize;
+ public short SeriesPaperWidth;
+ }
+
+ public class CHARASTATUSINFO02 extends Structure
+ {
+ public byte Version;
+ public int StartDate;
+ public int TotalPrintedLine;
+ public short TotalTime;
+ public int ChangeRibonLine;
+ }
+
+ public class CHARASTATUSINFO03 extends Structure
+ {
+ public byte Version;
+ public short CSFBin1PaperSize;
+ public byte CSFBin1PaperType;
+ public byte CSFBin1PaperRest;
+ public short CSFBin2PaperSize;
+ public byte CSFBin2PaperType;
+ public byte CSFBin2PaperRest;
+ public byte SIMMVolume;
+ }
+
+
+ public class TRAYFIELDINFO extends Structure
+ {
+ public byte FieldType;
+ public byte Position;
+ }
+
+ public class PAPERTRAYINFO extends Structure
+ {
+ public byte TrayType;
+ public byte TrayVolume;
+ public TRAYFIELDINFO TrayField;
+ }
+
+ public class JOBNAMEINFO extends Structure
+ {
+ public int JobID;
+ public char[] Jobname = new char[64];
+ }
+
+ public class CARTRIDGEANDINKINFO extends Structure
+ {
+ public byte CartridgeType;
+ public int ColorType;
+ public byte InkRest;
+ public byte InkDimension;
+ }
+
+
+ public class HEATERTEMPERATUREINFO extends Structure
+ {
+ public byte TemperatureUnit;
+ public byte TemperatureSetForPreHeater;
+ public byte PreHeaterTemperature;
+ public byte PreHeaterInfo;
+ public byte TemperatureSetForPlatenHeater;
+ public byte PlatenHeaterTemperature;
+ public byte PlatenHeaterInfo;
+ public byte TemperatureSetForAfterHeater;
+ public byte AfterHeaterTemperature;
+ public byte AfterHeaterInfo;
+ }
+
+ public class ROMCODEINFO extends Structure
+ {
+ public byte Size;
+ public byte[] Data = new byte[255];
+ }
+
+ public static class INKSIDMSTATUS_02 extends Structure
+ {
+ public int StatusSize;
+ public STATUSVERSION Version;
+ public byte StatusCode;
+ public byte ErrorCode;
+ public byte SelfPrintCode;
+
+ public int[] WarmingCode = new int[2];
+ public byte[] RestCSFPaper = new byte[4];
+ public byte[] ReserveRestCSFPaper = new byte[4];
+ public PAPERPATHINFO PaperPath;
+ public short PaperSizeError;
+ public byte PaperTypeError;
+ public PAPERPATHINFO PaperPathError;
+ public CHARASTATUSINFO01 CharaStatus01;
+ public CHARASTATUSINFO02 CharaStatus02;
+ public CHARASTATUSINFO03 CharaStatus03;
+ public short CopyPrintNumber;
+ public byte InkColorNumber;
+ public byte MicroWeaveInfo;
+ public short CleaningTime;
+ public byte[] PaperSelectStatus = new byte[11];
+ public byte[] ReservePaperSelectStatus = new byte[5];
+ public CARTRIDGEANDINKINFO[] CartridgeInk = new CARTRIDGEANDINKINFO[16];
+ public PAPERTRAYINFO[] PaperTray = new PAPERTRAYINFO[8];
+ public byte PrintTec;
+ public int ReplaceCartridge;
+ public short RomCode;
+ public byte[] InkRemainInfo = new byte[3];
+ public byte[] ReserveInkRemainInfo = new byte[5];
+ public byte CancelCode;
+ public byte CutterInfo;
+ public byte PaperJamInfo;
+ public byte RouteChangeLeverInfo;
+ public JOBNAMEINFO JobNameInfo;
+ public int ColorimetricCalibrationIDSize;
+ public byte[] ColorimetricCalibrationID = new byte[260];
+ public byte PaperRestUnit;
+ public int PaperRestValue;
+ public short PaperWidth;
+ public byte PaperInfoType;
+ public byte PaperInfoValue;
+ public byte InkSelect;
+ public HEATERTEMPERATUREINFO HeaterTemperature;
+ public byte AvailableWarningCode2;
+ public byte[] WarningCode2 = new byte[16];
+ public byte PrinterMachineInfo2SetFlag;
+ public byte[] PrinterMachineInfo2 = new byte[4];
+ public byte FatalErrorCodeSetFlag;
+ public byte FatalErrorCode;
+ public byte ReprintInfo;
+ public byte StatusReplyType;
+ public byte[] SerialNo = new byte[10];
+ public byte[] InkMaintenanceLimit = new byte[16];
+ public ROMCODEINFO RomCode2;
+ public byte[] Reserved = new byte[194];
+ };
+
+ private boolean _disposed = false;
+ public INKSIDMSTATUS_02 _struct;
+
+ public byte StatusCode;
+
+ public byte getStatusCode() {
+ return _struct.StatusCode;
+ }
+
+ public byte ErrorCode;
+ public byte getErrorCode() {
+ return _struct.ErrorCode;
+ }
+
+ public byte[] WarningCode;
+ public byte[] getWarningCode() {
+ return _struct.WarningCode2;
+ }
+ public ENSStatus()
+ {
+
+ int Size = Integer.SIZE / 8 * 6 + 556 + Short.SIZE / 8 * 5;
+
+ _ptrToStruct = new Memory(Size);
+
+ _struct = new INKSIDMSTATUS_02();
+ _struct.StatusSize = Size;
+ _struct.Version = new STATUSVERSION();
+ _struct.StatusCode = 0;
+ _struct.ErrorCode = 0;
+ _struct.SelfPrintCode = 0;
+ _struct.PaperPath = new PAPERPATHINFO();
+ _struct.PaperSizeError = 0;
+ _struct.PaperTypeError = 0;
+ _struct.PaperPathError = new PAPERPATHINFO();
+ _struct.CharaStatus01 = new CHARASTATUSINFO01();
+ _struct.CharaStatus02 = new CHARASTATUSINFO02();
+ _struct.CharaStatus03 = new CHARASTATUSINFO03();
+ _struct.CopyPrintNumber = 0;
+ _struct.InkColorNumber = 0;
+ _struct.MicroWeaveInfo = 0;
+ _struct.CleaningTime = 0;
+ _struct.PrintTec = 0;
+ _struct.ReplaceCartridge = 0;
+ _struct.RomCode = 0;
+ _struct.CancelCode = 0;
+ _struct.CutterInfo = 0;
+ _struct.PaperJamInfo = 0;
+ _struct.RouteChangeLeverInfo = 0;
+ _struct.JobNameInfo = new JOBNAMEINFO();
+ _struct.ColorimetricCalibrationIDSize = 0;
+ _struct.PaperRestUnit = 0;
+ _struct.PaperRestValue = 0;
+ _struct.PaperWidth = 0;
+ _struct.PaperInfoType = 0;
+ _struct.PaperInfoValue = 0;
+ _struct.InkSelect = 0;
+ _struct.HeaterTemperature = new HEATERTEMPERATUREINFO();
+ _struct.AvailableWarningCode2 = 0;
+ _struct.PrinterMachineInfo2SetFlag = 0;
+ _struct.FatalErrorCodeSetFlag = 0;
+ _struct.FatalErrorCode = 0;
+
+ Global_MEDIA_ENS.integerINKSIDMSTATUS_02Map.put(_ptrToStruct.getInt(0),_struct);
+ }
+
+
+
+}
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDM.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDM.java
new file mode 100644
index 00000000..4ecb474e
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDM.java
@@ -0,0 +1,21 @@
+package com.dreamchaser.depository_manage.EPSON.EPDM;
+
+import com.sun.jna.Memory;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+
+public abstract class EPDM {
+
+ protected Pointer _ptrToStruct = new Memory(24);
+ private boolean _disposed = false;
+
+ public Pointer StructurePointer;
+
+ public Pointer getStructurePointer() {
+ StructureToPtr();
+ return _ptrToStruct;
+ }
+
+ public abstract void PtrToStructure();
+ public abstract void StructureToPtr();
+}
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMEnumrations.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMEnumrations.java
new file mode 100644
index 00000000..0b2b5c53
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMEnumrations.java
@@ -0,0 +1,426 @@
+package com.dreamchaser.depository_manage.EPSON.EPDM;
+
+
+/**
+ * 用于EPDM相关的枚举类
+ */
+public class EPDMEnumrations {
+
+
+ /**
+ * 用于EPDM的错误码
+ */
+ public enum EPDMErrorCode {
+ EPDM_ERR_NORMAL(0), // The function succeeds.
+ EPDM_ERR_CMD(-1), // The command is not supported.
+ EPDM_ERR_PARAM(-2), // The parameter error
+ EPDM_ERR_NOTSUPPORT(-3), // The specified Printer Driver is not supported.
+ EPDM_ERR_DLLNOTFOUND(-4), // Not found the printer specific DLL
+ EPDM_ERR_NOMEM(-5), // Shortage of memory.
+ EPDM_ERR_OPENPRT(-6), // Open fails
+ EPDM_ERR_FAIL(-7), // Any error is occurred.
+ EPDM_ERR_VERSION(-8), // Not Supprot this DLL version.
+ EPDM_ERR_NOTVALID(-9), // The function can not reply valid value.
+ EPDM_ERR_COMMUNICATION(-10), // A communication error.
+ EPDM_ERR_FATAL(-11), // Fatal error.
+ EPDM_ERR_NOTFOUND(-12), // Not found the input data.
+ EPDM_ERR_FILEFORMAT(-13), // Import file format error.
+ EPDM_ERR_READFILE(-14), // The export file is not read.
+ EPDM_ERR_WRITEFILE(-15), // The export file is not write.
+ EPDM_ERR_OVERWRITE(-16), // The export file name is exist(Do not overwrite).
+ EPDM_ERR_LONGERNAME(-17), // The Add Name is longer.
+ EPDM_ERR_MAXDATA(-18), // The Add Data is max.
+ EPDM_ERR_FWVERSION(-19); // The F/W version is old.
+
+
+ private int i;
+
+ EPDMErrorCode(int i) {
+ this.i = i;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+ /**
+ * 用于获取对应的枚举值
+ *
+ * @param s 输入
+ * @return
+ */
+ public static EPDMErrorCode getEPDMErrorCode(int s) {
+ switch (s) {
+ case 0:
+ return EPDM_ERR_NORMAL;
+ case -1:
+ return EPDM_ERR_CMD;
+ case -2:
+ return EPDM_ERR_PARAM;
+ case -3:
+ return EPDM_ERR_NOTSUPPORT;
+ case -4:
+ return EPDM_ERR_DLLNOTFOUND;
+ case -5:
+ return EPDM_ERR_NOMEM;
+ case -6:
+ return EPDM_ERR_OPENPRT;
+ case -7:
+ return EPDM_ERR_FAIL;
+ case -8:
+ return EPDM_ERR_VERSION;
+ case -9:
+ return EPDM_ERR_NOTVALID;
+ case -10:
+ return EPDM_ERR_COMMUNICATION;
+ case -11:
+ return EPDM_ERR_FATAL;
+ case -12:
+ return EPDM_ERR_NOTFOUND;
+ case -13:
+ return EPDM_ERR_FILEFORMAT;
+ case -14:
+ return EPDM_ERR_READFILE;
+ case -15:
+ return EPDM_ERR_WRITEFILE;
+ case -16:
+ return EPDM_ERR_OVERWRITE;
+ case -17:
+ return EPDM_ERR_LONGERNAME;
+ case -18:
+ return EPDM_ERR_MAXDATA;
+ case -19:
+ return EPDM_ERR_FWVERSION;
+ default:
+ return null;
+ }
+
+ }
+
+ }
+
+ /**
+ * 用于打开打印机类型的枚举
+ */
+ public enum OpenType {
+ EPDM_OPENTYPE_CUR(0), // Open with the printer driver's current default DEVMODE data structure.
+ EPDM_OPENTYPE_ORG(1), // Open with the DEVMODE data structure in factory reset.
+ EPDM_OPENTYPE_IN(2); // Open with the DEVMODE data structure specified by the lpDM parameter.
+
+ private int i;
+
+ OpenType(int i) {
+ this.i = i;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+ /**
+ * 用于获取对应的枚举值
+ *
+ * @param i 输入
+ * @return
+ */
+ public static OpenType getEPDMOpenType(int i) {
+ switch (i) {
+ case 0:
+ return EPDM_OPENTYPE_CUR;
+ case 1:
+ return EPDM_OPENTYPE_ORG;
+ case 2:
+ return EPDM_OPENTYPE_IN;
+ default:
+ return null;
+ }
+ }
+
+ }
+
+
+ /**
+ * 用于控制类型的枚举
+ */
+ public enum Command {
+ EPDM_CMD_MEDIA(60), // Media type
+ EPDM_CMD_STRING(213), // String.
+ EPDM_CMD_FAVORITE(500), // My favorite :Comment=STR
+ EPDM_CMD_FAVORITEW(501), // My favorite :Comment=WSTR
+ EPDM_CMD_MEDIALAYOUT(502), // Media layout :Comment=STR
+ EPDM_CMD_MEDIALAYOUTW(503), // Media layout :Comment=WSTR
+ EPDM_CMD_QUALITY(504), // Print qulity
+ EPDM_CMD_AUTOCUT(505), // Media cut mode
+ EPDM_CMD_AUTOCUTNUM(506), // Count of media cut
+ EPDM_CMD_MEDIAPOSITION(507), // Search media position
+ EPDM_CMD_DRIVERSETTINGS(600), // Driver settings :Comment=STR
+ EPDM_CMD_DRIVERSETTINGSW(601), // Driver settings :Comment=WSTR
+ EPDM_CMD_PRINTERSETTINGS(602), // Printer settings :Comment=STR
+ EPDM_CMD_PRINTERSETTINGSW(603), // Printer settings :Comment=WSTR
+ EPDM_CMD_STRINGW(1024); // UNICODE String.
+
+ private int i;
+
+ Command(int i) {
+ this.i = i;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+ /**
+ * 用于获取对应的枚举值
+ *
+ * @param i 输入
+ * @return
+ */
+ public static Command getCommand(int i) {
+ switch (i) {
+ case 60:
+ return EPDM_CMD_MEDIA;
+ case 213:
+ return EPDM_CMD_STRING;
+ case 500:
+ return EPDM_CMD_FAVORITE;
+ case 501:
+ return EPDM_CMD_FAVORITEW;
+ case 502:
+ return EPDM_CMD_MEDIALAYOUT;
+ case 503:
+ return EPDM_CMD_MEDIALAYOUTW;
+ case 504:
+ return EPDM_CMD_QUALITY;
+ case 505:
+ return EPDM_CMD_AUTOCUT;
+ case 506:
+ return EPDM_CMD_AUTOCUTNUM;
+ case 507:
+ return EPDM_CMD_MEDIAPOSITION;
+ case 600:
+ return EPDM_CMD_DRIVERSETTINGS;
+ case 601:
+ return EPDM_CMD_DRIVERSETTINGSW;
+ case 602:
+ return EPDM_CMD_PRINTERSETTINGS;
+ case 603:
+ return EPDM_CMD_PRINTERSETTINGSW;
+ case 1024:
+ return EPDM_CMD_STRINGW;
+
+ default:
+ return null;
+ }
+ }
+
+ }
+
+
+ /**
+ * 用于结构类型的枚举
+ */
+ public enum StructVersion {
+ EPDM_STVER_STRING_1(1), // Structure Version define for [EPDM_STRING_1]
+ EPDM_STVER_STRINGW_1(1), // Structure Version define for [EPDM_STRINGW_1]
+ EPDM_STVER_FAVORITEINF(1), // Structure Version define for [EPDM_FAVORITEINF]
+ EPDM_STVER_FAVORITEINFW(1), // Structure Version define for [EPDM_FAVORITEINFW]
+ EPDM_STVER_FAVORITERANGE(1), // Structure Version define for [EPDM_FAVORITERANGE]
+ EPDM_STVER_MEDIALAYOUTINF(1), // Structure Version define for [EPDM_MEDIALAYOUTINF]
+ EPDM_STVER_MEDIALAYOUTINF_2(2), // Structure Version define for [EPDM_MEDIALAYOUTINF_2]
+ EPDM_STVER_MEDIATYPERANGE(1), // Structure Version define for [EPDM_MEDIATYPERANGE]
+ EPDM_STVER_MEDIATYPERANGE_2(2), // Structure Version define for [EPDM_MEDIATYPERANGE_2]
+ EPDM_STVER_MEDIALAYOUTRANGE(1), // Structure Version define for [EPDM_MEDIALAYOUTRANGE]
+ EPDM_STVER_MEDIALAYOUTRANGE_2(2), // Structure Version define for [EPDM_MEDIALAYOUTRANGE_2]
+ EPDM_STVER_MEDIALAYOUTADD(1), // Structure Version define for [EPDM_MEDIALAYOUTADD]
+ EPDM_STVER_MEDIALAYOUTADD_2(2), // Structure Version define for [EPDM_MEDIALAYOUTADD_2]
+ EPDM_STVER_MEDIALAYOUTADDW(1), // Structure Version define for [EPDM_MEDIALAYOUTADDW]
+ EPDM_STVER_MEDIALAYOUTADDW_2(2), // Structure Version define for [EPDM_MEDIALAYOUTADDW_2]
+ EPDM_STVER_PRINTERSETTINGS(1), // Structure Version define for [EPDM_PRINTERSETTINGS]
+ EPDM_STVER_EXPORTDATA(1), // Structure Version define for [EPDM_EXPORTDATA]
+ EPDM_STVER_EXPORTDATAW(1), // Structure Version define for [EPDM_EXPORTDATAW]
+ EPDM_STVER_FAVORITEADD(1), // Structure Version define for [EPDM_FAVORITEADD]
+ EPDM_STVER_FAVORITEADDW(1), // Structure Version define for [EPDM_FAVORITEADDW]
+ EPDM_STVER_EXPORT_DRIVERSETTINGS(1), // Structure Version define for [EPDM_EXPORT_DRIVERSETTINGS]
+ EPDM_STVER_EXPORT_DRIVERSETTINGSW(1), // Structure Version define for [EPDM_EXPORT_DRIVERSETTINGSW]
+ EPDM_STVER_EXPORT_PRINTERSETTINGS(1), // Structure Version define for [EPDM_EXPORT_PRINTERSETTINGS]
+ EPDM_STVER_EXPORT_PRINTERSETTINGSW(1); // Structure Version define for [EPDM_EXPORT_PRINTERSETTINGSW]
+
+ private int i;
+
+ StructVersion(int i) {
+ this.i = i;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+
+ }
+
+
+ /**
+ * 用于名称的枚举
+ */
+ public enum StringID
+ {
+ EPDM_STRING_MEDIA (3), // Media Name.
+ EPDM_STRING_FAVORITE (15), // Favorite Name
+ EPDM_STRING_MEDIALAYOUT (16), // Media Layout Name
+ EPDM_STRING_MEDIATYPE (17), // Media Type Name
+ EPDM_STRING_AUTOCUT (18), // Autocut Action Type Name
+ EPDM_STRING_MEDIAPOSITION (19); // Media Position Kind Name
+
+ private int i;
+ StringID(int i) {
+ this.i = i;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+ public static StringID getStringID(int s) {
+ switch (s) {
+ case 3:
+ return EPDM_STRING_MEDIA;
+ case 15:
+ return EPDM_STRING_FAVORITE;
+ case 16:
+ return EPDM_STRING_MEDIALAYOUT;
+ case 17:
+ return EPDM_STRING_MEDIATYPE;
+ case 18:
+ return EPDM_STRING_AUTOCUT;
+ case 19:
+ return EPDM_STRING_MEDIAPOSITION;
+ default:
+ return null;
+ }
+
+ }
+ }
+
+ /**
+ * 用于媒体类型的枚举
+ */
+ public enum MediaTypeID
+ {
+ EPDM_MEDIATYPE_DIECUT ((short) 0), // Die-cut Label(Gap)
+ EPDM_MEDIATYPE_BMDIECUT ((short)1), // Die-cut Label(BM)
+ EPDM_MEDIATYPE_BMDIECUTGAP ((short)2), // Black Mark Die-cut Label(Gap)
+ EPDM_MEDIATYPE_ALLLABEL ((short)3), // Full-page Label
+ EPDM_MEDIATYPE_BMALLLABEL ((short)4), // Black Mark Full-page Label
+ EPDM_MEDIATYPE_RECEIPT ((short)5), // Continuous Paper
+ EPDM_MEDIATYPE_BMRECEIPT ((short)6), // Black Mark Continuous Paper
+ EPDM_MEDIATYPE_TPDIECUT ((short)7), // Transparent Die-cut Label
+ EPDM_MEDIATYPE_TPALLLABEL ((short)8); // Transparent Full-page Label
+
+ private short i;
+
+
+ MediaTypeID(short i) {
+ this.i = i;
+ }
+
+ public short getI() {
+ return i;
+ }
+
+ public static MediaTypeID getMediaTypeID(short s) {
+ switch (s) {
+ case 0:
+ return EPDM_MEDIATYPE_DIECUT;
+ case 1:
+ return EPDM_MEDIATYPE_BMDIECUT;
+ case 2:
+ return EPDM_MEDIATYPE_BMDIECUTGAP;
+ case 3:
+ return EPDM_MEDIATYPE_ALLLABEL;
+ case 4:
+ return EPDM_MEDIATYPE_BMALLLABEL;
+ case 5:
+ return EPDM_MEDIATYPE_RECEIPT;
+ case 6:
+ return EPDM_MEDIATYPE_BMRECEIPT;
+ case 7:
+ return EPDM_MEDIATYPE_TPDIECUT;
+ case 8:
+ return EPDM_MEDIATYPE_TPALLLABEL;
+ default:
+ return null;
+ }
+
+ }
+ }
+
+
+ /**
+ * 用于打印质量的枚举
+ */
+ public enum PrintQualityID
+ {
+ EPDM_QUALITY_360X180 (0), // Quality level (360dpi * 180dpi)
+ EPDM_QUALITY_360X360 (1), // Quality level (360dpi * 360dpi)
+ EPDM_QUALITY_720X360 (2); // Quality level (720dpi * 360dpi)
+
+
+ private int i;
+
+ PrintQualityID(int i) {
+ this.i = i;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+ public static PrintQualityID getPrintQualityID(int s) {
+ switch (s) {
+ case 0:
+ return EPDM_QUALITY_360X180;
+ case 1:
+ return EPDM_QUALITY_360X360;
+ case 2:
+ return EPDM_QUALITY_720X360;
+ default:
+ return null;
+ }
+
+ }
+
+
+ }
+
+
+ /**
+ * 用于打印机状态的枚举
+ */
+ public enum OverWriteID
+ {
+ EPDM_OVERWRITE_OFF (0), // Disable over write
+ EPDM_OVERWRITE_ON (1); // Enable over write
+
+
+ private int i;
+ OverWriteID(int i) {
+ this.i = i;
+ }
+
+ public int getI() {
+ return i;
+ }
+
+ public static OverWriteID getOverWriteID(int s) {
+ switch (s) {
+ case 0:
+ return EPDM_OVERWRITE_OFF;
+ case 1:
+ return EPDM_OVERWRITE_ON;
+ default:
+ return null;
+ }
+
+ }
+ }
+}
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMMediaLayoutRange.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMMediaLayoutRange.java
new file mode 100644
index 00000000..c9b7e82c
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMMediaLayoutRange.java
@@ -0,0 +1,214 @@
+package com.dreamchaser.depository_manage.EPSON.EPDM;
+
+import com.dreamchaser.depository_manage.EPSON.epsonException.EPDMException;
+import com.dreamchaser.depository_manage.config.EPSON.EPDM.Global_MEDIA_EPDM;
+import com.dreamchaser.depository_manage.exception.MyException;
+import com.sun.jna.Memory;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+public class EPDMMediaLayoutRange extends EPDM{
+
+
+
+
+ public class EPDM_MEDIALAYOUTRANGE extends Structure
+ {
+ public int dwVersion;
+ public int dwSize;
+ public short iIDCount;
+ public short iMediaTypeCount;
+ public Pointer lpMediaLayoutID;
+ public Pointer lpMediaTypeRange;
+ public short iMaxString;
+ public short iMaxCount;
+
+
+ @Override
+ protected List getFieldOrder() {
+ return new ArrayList<>(Arrays.asList("dwVersion", "dwSize", "iIDCount", "iMediaTypeCount", "lpMediaLayoutID", "lpMediaTypeRange", "iMaxString", "iMaxCount"));
+ }
+
+ public EPDM_MEDIALAYOUTRANGE() {
+
+ }
+
+ public EPDM_MEDIALAYOUTRANGE(Pointer p) {
+ super(p);
+ }
+
+ };
+
+ private boolean _disposed = false;
+ private EPDM_MEDIALAYOUTRANGE _struct;
+
+
+
+ public EPDMEnumrations.StructVersion Version;
+
+
+ public short IDCount;
+
+ public short getIDCount() {
+ return _struct.iIDCount;
+ }
+
+
+ public short[] MediaLayoutID;
+
+ public short[] getMediaLayoutID() {
+
+ try
+ {
+ short[] arr = new short[_struct.iIDCount];
+
+ for (int i = 0; i < _struct.iIDCount; i++)
+ {
+ Pointer current = new Memory(_struct.lpMediaLayoutID.getLong(0) + (2 * i));
+
+ arr[i] = Global_MEDIA_EPDM.epdm_mediaLayoutRange_short.get(current.getInt(0));
+ }
+ return arr;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+
+ }
+
+
+ public EPDMMediaTypeRange.EPDM_MEDIATYPERANGE[] MediaTypeRange;
+
+ public EPDMMediaTypeRange.EPDM_MEDIATYPERANGE[] getMediaTypeRange() {
+ try
+ {
+ EPDMMediaTypeRange.EPDM_MEDIATYPERANGE[] arr = new EPDMMediaTypeRange.EPDM_MEDIATYPERANGE[_struct.iMediaTypeCount];
+
+ int struct_size = 22 * Short.SIZE / 8 + 2 * Integer.SIZE / 8;
+
+ for (int i = 0; i < _struct.iMediaTypeCount; i++)
+ {
+ Pointer current = new Memory(_struct.lpMediaTypeRange.getInt(0) + (struct_size) * i);
+ arr[i] = Global_MEDIA_EPDM.epdm_mediatyperangeMap.get(current.getInt(0));
+ }
+ return arr;
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ System.out.println(e.getMessage());
+ }
+ return MediaTypeRange;
+ }
+
+ public EPDMMediaLayoutRange() {
+
+ int struct_size = 24;
+ _ptrToStruct = new Memory(struct_size);
+ _struct = new EPDM_MEDIALAYOUTRANGE(_ptrToStruct);
+ _struct.dwVersion = EPDMEnumrations.StructVersion.EPDM_STVER_MEDIALAYOUTRANGE.getI();
+ _struct.dwSize = struct_size;
+ _struct.iIDCount = 0;
+ _struct.iMediaTypeCount = 0;
+ _struct.lpMediaLayoutID = new Memory(10);
+ _struct.lpMediaTypeRange = new Memory(10);
+ _struct.iMaxString = 0;
+ _struct.iMaxCount = 0;
+
+ StructureToPtr();
+ PtrToStructure();
+ }
+
+ @Override
+ public void PtrToStructure() {
+ _struct.read();
+ _struct = Global_MEDIA_EPDM.epdm_medialayoutrangeMap.get(_ptrToStruct.getInt(0));
+
+ }
+
+ @Override
+ public void StructureToPtr() {
+ _struct.write();
+ Global_MEDIA_EPDM.epdm_medialayoutrangeMap.put(_ptrToStruct.getInt(0),_struct);
+ }
+
+ public void Alloc()
+ {
+ try
+ {
+ // iIDCount、iMediaTypeCount = 0 is EPDM_ERR_FAIL.
+ if (_struct.iIDCount == 0 || _struct.iMediaTypeCount == 0)
+ {
+ throw new EPDMException(EPDMEnumrations.EPDMErrorCode.EPDM_ERR_FAIL);
+ }
+
+
+
+ // Free the memory.
+ Native.free(Pointer.nativeValue(_struct.lpMediaLayoutID));
+ Native.free(Pointer.nativeValue(_struct.lpMediaTypeRange));
+
+
+ _struct.lpMediaLayoutID = new Memory(_struct.iIDCount * Short.SIZE / 8);
+
+ int sizeOfEPDM_MEDIATYPERANGE = (22 * Short.SIZE / 8 + 2 * Integer.SIZE / 8);
+
+ _struct.lpMediaTypeRange = new Memory(_struct.iMediaTypeCount *sizeOfEPDM_MEDIATYPERANGE ).getPointer(0);
+
+ EPDMMediaTypeRange.EPDM_MEDIATYPERANGE[] epdmMediaTypeRange = new EPDMMediaTypeRange.EPDM_MEDIATYPERANGE[_struct.iMediaTypeCount];
+ for (int i = 0; i < _struct.iMediaTypeCount; i++)
+ {
+ Pointer current = new Memory(_ptrToStruct.getLong(0) + (sizeOfEPDM_MEDIATYPERANGE * i));
+ epdmMediaTypeRange[i] = Global_MEDIA_EPDM.epdm_mediatyperangeMap.get(current.getInt(0));
+
+ epdmMediaTypeRange[i].dwVersion = EPDMEnumrations.StructVersion.EPDM_STVER_MEDIATYPERANGE.getI();
+ epdmMediaTypeRange[i].dwSize = (22 * Short.SIZE / 8 + 2 * Integer.SIZE / 8);
+
+ Pointer current2 = new Memory(_struct.lpMediaTypeRange.getLong(0) + (sizeOfEPDM_MEDIATYPERANGE * i));
+ Global_MEDIA_EPDM.epdm_mediatyperangeMap.put(current2.getInt(0),epdmMediaTypeRange[i]);
+ }
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ System.out.println(e.getMessage());
+ }
+ }
+
+ public int GetMediaTypeIndex(EPDMEnumrations.MediaTypeID mediaTypeID)
+ {
+ try
+ {
+ int i = -1;
+
+ if (_struct.iMediaTypeCount <= 0)
+ {
+ return i;
+ }
+
+ for (i = 0; i < _struct.iMediaTypeCount; i++)
+ {
+ short typeID = MediaTypeRange[i].iTypeID;
+ if (typeID == mediaTypeID.getI())
+ {
+ break;
+ }
+ }
+ return i;
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ throw new MyException(e.getMessage());
+ }
+ }
+
+
+
+}
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMMediaTypeRange.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMMediaTypeRange.java
new file mode 100644
index 00000000..8e417e3d
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMMediaTypeRange.java
@@ -0,0 +1,125 @@
+package com.dreamchaser.depository_manage.EPSON.EPDM;
+
+import com.dreamchaser.depository_manage.config.EPSON.EPDM.Global_MEDIA_EPDM;
+import com.sun.jna.Memory;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import com.sun.xml.bind.v2.runtime.MarshallerImpl;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class EPDMMediaTypeRange extends EPDM {
+
+ @Override
+ public void PtrToStructure() {
+ _struct.read();
+ _struct = Global_MEDIA_EPDM.epdm_mediatyperangeMap.get(_ptrToStruct.getInt(0));
+ }
+
+ @Override
+ public void StructureToPtr() {
+ _struct.write();
+ Global_MEDIA_EPDM.epdm_mediatyperangeMap.put(_ptrToStruct.getInt(0),_struct);
+ }
+
+ public class EPDM_MEDIATYPERANGE extends Structure
+ {
+ public int dwVersion;
+ public int dwSize;
+ public short iMaxPaperWid;
+ public short iMaxPaperHig;
+ public short iMaxLabelWid;
+ public short iMaxLabelHig;
+ public short iMaxLabelGap;
+ public short iMaxBMGap;
+ public short iMaxPrintWid;
+ public short iMaxPrintHig;
+ public short iMaxPrintX;
+ public short iMaxPrintY;
+ public short iMinPaperWid;
+ public short iMinPaperHig;
+ public short iMinLabelWid;
+ public short iMinLabelHig;
+ public short iMinLabelGap;
+ public short iMinBMGap;
+ public short iMinPrintWid;
+ public short iMinPrintHig;
+ public short iMinPrintX;
+ public short iMinPrintY;
+ public short iTypeID;
+ public short iRsv;
+
+ @Override
+ protected List getFieldOrder() {
+ return new ArrayList<>(Arrays.asList("dwVersion", "dwSize", "iMaxPaperWid", "iMaxPaperHig", "iMaxLabelWid", "iMaxLabelHig",
+ "iMaxLabelGap", "iMaxBMGap","iMaxPrintWid","iMaxPrintHig","iMaxPrintX","iMaxPrintY","iMinPaperWid","iMinPaperHig",
+ "iMinLabelWid","iMinLabelHig","iMinLabelGap","iMinBMGap","iMinPrintWid","iMinPrintHig","iMinPrintX","iMinPrintY",
+ "iTypeID","iRsv"));
+ }
+
+ public EPDM_MEDIATYPERANGE() {
+
+ }
+
+ public EPDM_MEDIATYPERANGE(Pointer p) {
+ super(p);
+ }
+
+ };
+
+ private boolean _disposed = false;
+ public EPDM_MEDIATYPERANGE _struct;
+
+
+ public short MaxPaperWid;
+
+ public short getMaxPaperWid() {
+ return _struct.iMaxPaperWid;
+ }
+
+ public short MaxPaperHig;
+
+ public short getMaxPaperHig() {
+ return _struct.iMaxPaperHig;
+ }
+
+ public EPDMMediaTypeRange()
+ {
+
+ int struct_size = 22 * Short.SIZE / 8 + 2 * Integer.SIZE / 8;
+
+ _ptrToStruct =new Memory(struct_size );
+ _struct = new EPDM_MEDIATYPERANGE(_ptrToStruct);
+ _struct.dwVersion = EPDMEnumrations.StructVersion.EPDM_STVER_MEDIATYPERANGE.getI();
+ _struct.dwSize = struct_size;
+ _struct.iMaxPaperWid = 0;
+ _struct.iMaxPaperHig = 0;
+ _struct.iMaxLabelWid = 0;
+ _struct.iMaxLabelHig = 0;
+ _struct.iMaxLabelGap = 0;
+ _struct.iMaxBMGap = 0;
+ _struct.iMaxPrintWid = 0;
+ _struct.iMaxPrintHig = 0;
+ _struct.iMaxPrintX = 0;
+ _struct.iMaxPrintY = 0;
+ _struct.iMinPaperWid = 0;
+ _struct.iMinPaperHig = 0;
+ _struct.iMinLabelWid = 0;
+ _struct.iMinLabelHig = 0;
+ _struct.iMinLabelGap = 0;
+ _struct.iMinBMGap = 0;
+ _struct.iMinPrintWid = 0;
+ _struct.iMinPrintHig = 0;
+ _struct.iMinPrintX = 0;
+ _struct.iMinPrintY = 0;
+ _struct.iTypeID = EPDMEnumrations.MediaTypeID.EPDM_MEDIATYPE_DIECUT.getI();
+ _struct.iRsv = 0;
+
+ StructureToPtr();
+ PtrToStructure();
+ }
+
+
+}
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMSelectData.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMSelectData.java
new file mode 100644
index 00000000..2f69cc29
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMSelectData.java
@@ -0,0 +1,151 @@
+package com.dreamchaser.depository_manage.EPSON.EPDM;
+
+import com.dreamchaser.depository_manage.EPSON.epsonException.EPDMException;
+import com.dreamchaser.depository_manage.config.EPSON.EPDM.Global_MEDIA_EPDM;
+import com.dreamchaser.depository_manage.exception.MyException;
+import com.sun.jna.Memory;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class EPDMSelectData extends EPDM{
+
+ @Override
+ public void PtrToStructure() {
+ _struct.read();
+ _struct = Global_MEDIA_EPDM.epdm_selectdataMap.get(_ptrToStruct.getInt(0));
+ }
+
+ @Override
+ public void StructureToPtr() {
+ _struct.write();
+ Global_MEDIA_EPDM.epdm_selectdataMap.put(_ptrToStruct.getInt(0),_struct);
+ }
+
+ public static class EPDM_SELECTDATA extends Structure
+ {
+ public short iCount;
+ public short iSize;
+ public Pointer lpData;
+
+ @Override
+ protected List getFieldOrder() {
+ return new ArrayList<>(Arrays.asList("iCount", "iSize", "lpData"));
+ }
+
+ public EPDM_SELECTDATA(Pointer p) {
+ super(p);
+ }
+
+ public EPDM_SELECTDATA() {
+ }
+ };
+
+
+ private boolean _disposed = false;
+ private EPDM_SELECTDATA _struct;
+
+
+ public short Count;
+
+
+ public Long[] Data;
+
+
+ public short getCount() {
+ return _struct.iCount;
+ }
+
+ public Long[] getData() {
+ try
+ {
+ if (_struct.lpData == Pointer.NULL || _struct.iSize > Long.SIZE / 8)
+ {
+ return null;
+ }
+
+ Long[] arr = new Long[_struct.iCount];
+
+ for (int i = 0; i < _struct.iCount; i++)
+ {
+ Pointer current = new Memory(_struct.lpData.getLong(0) + (_struct.iSize * i));
+ arr[i] = GetSelectData(current);
+ }
+ return arr;
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ throw new MyException(e.getMessage());
+ }
+ }
+
+
+ public EPDMSelectData()
+ {
+ _ptrToStruct = new Memory(Short.SIZE / 8 * 2);
+
+ _struct.iCount = 0;
+ _struct.iSize = 0;
+ _struct.lpData = new Memory(10);
+
+
+ StructureToPtr();
+ PtrToStructure();
+ }
+
+
+ private Long GetSelectData(Pointer p)
+ {
+ try
+ {
+ Long data = 0L;
+ switch (_struct.iSize)
+ {
+ case 8:
+ data = Global_MEDIA_EPDM.epdm_select_data_int64.get(p.getInt(0));
+ break;
+ case 4:
+ data = Long.valueOf(Global_MEDIA_EPDM.epdm_select_data_int32.get(p.getInt(0)));
+ break;
+ case 2:
+ default:
+ data = Long.valueOf(Global_MEDIA_EPDM.epdm_select_data_int16.get(p.getInt(0)));
+ break;
+ }
+ return data;
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ throw new MyException(e.getMessage());
+ }
+ }
+
+
+ public void Alloc()
+ {
+ try
+ {
+ // iIDCount、iSize = 0 is EPDM_ERR_FAIL.
+ if (_struct.iCount == 0 || _struct.iSize == 0)
+ {
+ throw new EPDMException(EPDMEnumrations.EPDMErrorCode.EPDM_ERR_FAIL);
+ }
+
+ // Free the memory.
+ Native.free(Pointer.nativeValue(_struct.lpData));
+ // Allocate the memory. - EPDMSelectData.lpData
+ _struct.lpData =new Memory(_struct.iCount * _struct.iSize);
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ throw new MyException(e.getMessage());
+ }
+ }
+}
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMString.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMString.java
new file mode 100644
index 00000000..c7348c7f
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/EPDM/EPDMString.java
@@ -0,0 +1,150 @@
+package com.dreamchaser.depository_manage.EPSON.EPDM;
+
+import com.dreamchaser.depository_manage.EPSON.epsonException.EPDMException;
+import com.dreamchaser.depository_manage.config.EPSON.EPDM.Global_MEDIA_EPDM;
+import com.dreamchaser.depository_manage.exception.MyException;
+import com.sun.jna.Memory;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import com.sun.media.jfxmedia.track.Track;
+import jdk.nashorn.internal.objects.Global;
+
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+
+public class EPDMString extends EPDM {
+
+ public class EPDM_STRING_1 extends Structure
+ {
+ public int dwVersion;
+ public int dwSize;
+ public int dwStrSize;
+ public int dwCommand;
+ public int dwID;
+ public Pointer lpString;
+
+
+ @Override
+ protected List getFieldOrder() {
+ return new ArrayList<>(Arrays.asList("dwVersion", "dwSize", "dwStrSize", "dwCommand", "dwID", "lpString"));
+ }
+
+ public EPDM_STRING_1() {
+ }
+
+ public EPDM_STRING_1(Pointer p) {
+ super(p);
+ }
+ };
+
+ private boolean _disposed = false;
+ private EPDM_STRING_1 _struct;
+
+ public int Command;
+
+ public int getCommand() {
+ return _struct.dwCommand;
+ }
+
+ public void setCommand(int command) {
+ _struct.dwCommand = command;
+ }
+
+ public int ID;
+
+ public int getID() {
+ return _struct.dwID;
+ }
+
+ public void setID(int ID) {
+ _struct.dwID = ID;
+ }
+
+
+
+ public String string;
+
+ public String getString() {
+ byte[] StringData = new byte[_struct.dwStrSize];
+
+ // Deploy the memory to array.
+ int i = 0;
+ for (i = 0; i < _struct.dwStrSize; i++)
+ {
+ Pointer current = new Memory(_struct.lpString.getLong(0) + i);
+// StringData[i]= current.getByte(0);
+ StringData[i] = Global_MEDIA_EPDM.epdm_epdmString_byte.get(current.getInt(0));
+ if (StringData[i] == 0)
+ {
+ break;
+ }
+ }
+ try {
+ return new String(StringData,"gbk");
+ } catch (UnsupportedEncodingException e) {
+ throw new MyException(e.getMessage());
+ }
+ }
+
+ public EPDMString()
+ {
+
+
+ int structSize = 5 * Integer.SIZE / 8;
+ _ptrToStruct = new Memory( structSize );
+
+ _struct = new EPDM_STRING_1(_ptrToStruct);
+ _struct.dwVersion = EPDMEnumrations.StructVersion.EPDM_STVER_STRING_1.getI();
+ _struct.dwSize = structSize;
+ _struct.dwStrSize = 0;
+ _struct.dwCommand = 0;
+ _struct.dwID = 0;
+ _struct.lpString = new Memory(10);
+ StructureToPtr();
+ PtrToStructure();
+ }
+
+
+ @Override
+ public void PtrToStructure() {
+ _struct.read();
+ _struct = Global_MEDIA_EPDM.epdm_string_1Map.get(_ptrToStruct.getInt(0));
+ }
+
+ @Override
+ public void StructureToPtr() {
+ _struct.write();
+ Global_MEDIA_EPDM.epdm_string_1Map.put(_ptrToStruct.getInt(0),_struct);
+ }
+
+
+ public void Alloc()
+ {
+ try
+ {
+ // m_Struct.dwStrSize == 0 is EPDM_ERR_FAIL.
+ if (_struct.dwStrSize == 0)
+ {
+ throw new EPDMException(EPDMEnumrations.EPDMErrorCode.EPDM_ERR_FAIL);
+ }
+
+ // Free the memory.
+ Native.free(Pointer.nativeValue(_struct.lpString));
+
+ // Allocate the memory. - EPDMString.lpString
+ _struct.lpString =new Memory((int)_struct.dwStrSize);
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ throw new MyException(e.getMessage());
+ }
+ }
+
+
+
+}
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/MessageString.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/MessageString.java
new file mode 100644
index 00000000..319747dd
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/MessageString.java
@@ -0,0 +1,301 @@
+package com.dreamchaser.depository_manage.EPSON.Other;
+
+import com.dreamchaser.depository_manage.EPSON.ENS.ENSEnumrations;
+import com.dreamchaser.depository_manage.EPSON.ENS.ENSEnumrations.StatusCode;
+import com.dreamchaser.depository_manage.EPSON.EPDM.EPDMEnumrations;
+import com.dreamchaser.depository_manage.exception.MyException;
+import com.dreamchaser.depository_manage.service.impl.EPSON.ENS.ENSWrapperImpl;
+
+
+public class MessageString {
+ public static final int STATE_ENS_ERROR = 1;
+ public static final int STATE_MEDIA_LAYOUT_ERROR = 2;
+ public static final int STATE_MEDIA_POSITION_ERROR = 3;
+ public static final int STATE_PRINT_SETTING_ERROR = 4;
+ public static final int STATE_EPDI_DLL_NOT_FOUND = 5;
+ public static final int STATE_ENS_DLL_NOT_FOUND = 6;
+ public static final int STATE_DRIVER_NOT_FOUND = 7;
+ public static final int STATE_SYSTEM_PARAM_ERROR = 8;
+ public static final int STATE_DRAWIMAGE_ERROR = 9;
+
+ public static final String STR_ENS_ERROR = "Can't get the printer status.\n\nEpsonNet SDK error code : ";
+ public static final String STR_MEDIA_LAYOUT_ERROR = "Fail to add the media layout.\r\n\r\nEPDI error code : ";
+ public static final String STR_MEDIA_POSITION_ERROR = "Fail to change the media position detection setting.\r\n\r\nEPDI error code : ";
+ public static final String STR_PRINT_SETTING_ERROR = "Fail to change the print settings.\r\n\r\nEPDI error code : ";
+ public static final String STR_STATUS_BUSY = "Printer is busy.\r\nStop the printing...";
+ public static final String STR_STATUS_PRINTING = "Printer is printing now.\r\nStop the printing...";
+ public static final String STR_STATUS_CLEANING = "Printer is cleaning the print head.\r\nStop the printing...";
+ public static final String STR_STATUS_OTHER = "Printer is busy.\r\nStop the printing...";
+ public static final String STR_ERROR_PAPERJAM = "Paper jam error.\r\nStop the printing...";
+ public static final String STR_ERROR_PAPEROUT = "Paper out error.\r\nStop the printing...";
+ public static final String STR_ERROR_INKEND = "Ink cartridge error.\r\nStop the printing...";
+ public static final String STR_ERROR_OTHER = "Other error.\r\nStop the printing...";
+ public static final String STR_WARNING_INKLOW = "Ink is low.\r\n";
+ public static final String STR_WARNING_OTHER = "Other warning.\r\n";
+ public static final String STR_EPDI_DLL_NOT_FOUND = "doesn't support this function.\r\nOr check if program architecture(x86/x64) and OS architecture are correct.";
+ public static final String STR_ENS_DLL_NOT_FOUND = "EpsonNet SDK isn't installed in this PC.\r\nPerfoming the printing without printer status check.";
+ public static final String STR_DRIVER_NOT_FOUND = "Epson printer doesn't exist. \r\n\r\nPlease install the printer driver before starting the sample program.";
+ public static final String STR_SYSTEM_PARAM_ERROR = "Specified value is out of range.";
+ public static final String STR_DRAWIMAGE_ERROR = "Failed to print image.";
+
+
+ public static boolean GetSDKError(int i, int state) {
+ boolean err = true;
+ String strMessage = "";
+ String strSDKErrorCode;
+
+ try {
+ if (i != ENSEnumrations.ENSErrorCode.ERR_BASE.getI()) {
+ strMessage = STR_ENS_ERROR;
+ err = false;
+ ENSEnumrations.ENSErrorCode ensErrorCode = ENSEnumrations.ENSErrorCode.getENSErrorCode(i);
+ if (ensErrorCode != null) {
+ strSDKErrorCode = ensErrorCode.toString();
+ }
+
+ }
+ } catch (Exception e) {
+ // Error handling.
+ throw new MyException(e.getMessage());
+ }
+ return err;
+ }
+
+
+ public static boolean GetEPDMError(int i, int state)
+ {
+ boolean err = true;
+ String strMessage = "";
+ String strEPDMErrorCode;
+
+ try
+ {
+ if (i != EPDMEnumrations.EPDMErrorCode.EPDM_ERR_NORMAL.getI())
+ {
+ switch(state)
+ {
+ case (STATE_MEDIA_LAYOUT_ERROR):
+ {
+ strMessage = STR_MEDIA_LAYOUT_ERROR;
+ err = false;
+ break;
+ }
+ case (STATE_MEDIA_POSITION_ERROR):
+ {
+ strMessage = STR_MEDIA_POSITION_ERROR;
+ err = false;
+ break;
+ }
+ case (STATE_PRINT_SETTING_ERROR):
+ {
+ strMessage = STR_PRINT_SETTING_ERROR;
+ err = false;
+ break;
+ }
+ default:
+ {
+ strMessage = "";
+ err = false;
+ break;
+ }
+ }
+ if (strMessage.length() > 0)
+ {
+ strEPDMErrorCode = EPDMEnumrations.EPDMErrorCode.valueOf(strMessage).toString();
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ }
+ return err;
+ }
+
+
+ public static boolean GetPrinterStatusError(ENSEnumrations.StatusCode sc, ENSEnumrations.ErrorCode ec, ENSWrapperImpl.WARNING_INFO wc)
+ {
+ boolean err = true;
+ String strMessage = "";
+
+ try
+ {
+ switch (sc)
+ {
+ case ST_Busy:
+ {
+ strMessage = STR_STATUS_BUSY;
+ err = false;
+ break;
+ }
+ case ST_Wait:
+ {
+ strMessage = STR_STATUS_PRINTING;
+ err = false;
+ break;
+ }
+ case ST_Cleaning:
+ {
+ strMessage = STR_STATUS_CLEANING;
+ err = false;
+ break;
+ }
+ case ST_Error:
+ {
+ switch (ec)
+ {
+ case ERR_PaperJam:
+ {
+ strMessage = STR_ERROR_PAPERJAM;
+ err = false;
+ break;
+ }
+ case ERR_Paperout:
+ {
+ strMessage = STR_ERROR_PAPEROUT;
+ err = false;
+ break;
+ }
+ case ERR_Inkout:
+ {
+ strMessage = STR_ERROR_INKEND;
+ err = false;
+ break;
+ }
+ default:
+ {
+ strMessage = STR_ERROR_OTHER;
+ err = false;
+ break;
+ }
+ }
+ break;
+ }
+ case ST_Idle:
+ {
+ if (wc.InkLowWarning )
+ {
+ strMessage += STR_WARNING_INKLOW;
+ err = true;
+ }
+ if (wc.OtherWarning)
+ {
+ strMessage += STR_WARNING_OTHER;
+ err = true;
+ }
+ break;
+ }
+ default:
+ {
+ strMessage = STR_STATUS_OTHER;
+ err = false;
+ break;
+ }
+ }
+ if (strMessage.length() > 0)
+ {
+// MessageBox.Show((strMessage), "", MessageBoxButtons.OK);
+ // 弹出一个消息框,并返回结构
+ }
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ }
+ return err;
+ }
+
+
+ public static boolean GetSystemError(int state, String devName)
+ {
+ boolean err = true;
+ String strMessage = "";
+
+ if ( devName == null)
+ {
+ devName = "";
+ }
+ try
+ {
+ switch (state)
+ {
+ case (STATE_EPDI_DLL_NOT_FOUND):
+ {
+ strMessage = String.format("%s %s",devName, STR_EPDI_DLL_NOT_FOUND);
+ err = false;
+ break;
+ }
+ default:
+ {
+ strMessage = "";
+ err = false;
+ break;
+ }
+ }
+ if (strMessage.length() > 0)
+ {
+// MessageBox.Show((strMessage), "", MessageBoxButtons.OK);
+ // 弹出一个文本信息框
+ }
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ }
+ return err;
+ }
+
+ public static boolean GetSystemError(int state)
+ {
+ boolean err = true;
+ String strMessage = "";
+
+ try
+ {
+ switch (state)
+ {
+ case (STATE_ENS_DLL_NOT_FOUND):
+ {
+ strMessage = STR_ENS_DLL_NOT_FOUND;
+ err = false;
+ break;
+ }
+ case (STATE_DRIVER_NOT_FOUND):
+ {
+ strMessage = STR_DRIVER_NOT_FOUND;
+ err = false;
+ break;
+ }
+ case (STATE_SYSTEM_PARAM_ERROR):
+ {
+ strMessage = STR_SYSTEM_PARAM_ERROR;
+ err = false;
+ break;
+ }
+ case (STATE_DRAWIMAGE_ERROR):
+ {
+ strMessage = STR_DRAWIMAGE_ERROR;
+ err = false;
+ break;
+ }
+ default:
+ {
+ strMessage = "";
+ err = false;
+ break;
+ }
+ }
+ if (strMessage.length() > 0)
+ {
+// MessageBox.Show((strMessage), "", MessageBoxButtons.OK);
+ // 弹出一个文本信息框
+ }
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ }
+ return err;
+ }
+
+}
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/Print.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/Print.java
new file mode 100644
index 00000000..711630f1
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/Print.java
@@ -0,0 +1,125 @@
+package com.dreamchaser.depository_manage.EPSON.Other;
+
+import com.dreamchaser.depository_manage.exception.MyException;
+
+import javax.print.PrintService;
+import java.awt.*;
+import java.awt.geom.Rectangle2D;
+import java.awt.print.*;
+
+public class Print {
+ private int _pageNumber = 0;
+ private int _totalPrintPage = 0;
+ private boolean _exceptionFlag = false;
+
+ private PrinterJob _pdPrint;
+
+
+ private void PD_PrintPage()
+ {
+ try
+ {
+ PD_PrintPage_DrawBarcode();
+ PD_PrintPage_Close();
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ _exceptionFlag = true;
+ }
+ }
+
+
+ public Print(String devName, String portName, int totalPrintPage)
+ {
+ try
+ {
+ // Create the PrintDocumentObject.
+ _pdPrint = PrinterJob.getPrinterJob();
+ // Add the PrintPageEventHandler.
+// _pdPrint.PrintPage += new PrintPageEventHandler(PD_PrintPage);
+
+ // Set the using Printer.
+ PrintService[] printServices = PrinterJob.lookupPrintServices();
+ for (PrintService printService:printServices
+ ) {
+ String name = printService.getName();
+ if(name.contains(devName)){
+ _pdPrint.setPrintService(printService);
+ break;
+ }
+ }
+ _pdPrint.setJobName("Test Print");
+
+
+ _totalPrintPage = totalPrintPage;
+
+ return;
+ }
+ catch(Exception e)
+ {
+ // Error handling.
+ throw new MyException(e.getMessage());
+ }
+ }
+
+
+
+
+ public void DoPrinting()
+ {
+ try
+ {
+ // Start the print.
+ _pdPrint.print();
+
+ if(_exceptionFlag)
+ {
+ throw new Exception();
+ }
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ throw new MyException(e.getMessage());
+ }
+ }
+
+ private void PD_PrintPage_DrawBarcode()
+ {
+ try
+ {
+ // 调用预设二维码打印类
+ _pdPrint.setPrintable(new PrintBarCode());
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ throw new MyException(e.getMessage());
+ }
+ }
+
+ private void PD_PrintPage_Close()
+ {
+ try
+ {
+ // Check final page.
+ if (_pageNumber < _totalPrintPage)
+ {
+ _pdPrint.cancel();
+ }
+
+ }
+ catch (Exception e)
+ {
+ // Error handling.
+ throw new MyException(e.getMessage());
+ }
+ }
+
+
+
+
+
+}
+
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/PrintBarCode.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/PrintBarCode.java
new file mode 100644
index 00000000..f9dec53b
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/PrintBarCode.java
@@ -0,0 +1,57 @@
+package com.dreamchaser.depository_manage.EPSON.Other;
+
+import java.awt.*;
+import java.awt.print.PageFormat;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+
+public class PrintBarCode implements Printable {
+
+ /**
+
+ * @param graphics 指明打印的图形环境
+
+ * @param pageFormat 指明打印页格式(页面大小以点为计量单位,1点为1英才的1/72,1英寸为25.4毫米。A4纸大致为595×842点)
+
+ * @param pageIndex 指明页号
+
+ **/
+
+ // 设置用于打印的编码
+ public String code;
+
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ @Override
+ public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
+
+
+ //print string
+ String str = code;
+
+ //转换成Graphics2D
+ Graphics2D g2 = (Graphics2D) g;
+
+ //设置打印颜色为黑色
+ g2.setColor(Color.black);
+
+ //打印起点坐标
+ double x = pf.getImageableX();
+ double y = pf.getImageableY();
+
+ if (pageIndex == 0) {//设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)
+
+ //Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput
+ Font font = new Font("Courier New", Font.PLAIN, 9);
+ g2.setFont(font);//设置字体
+
+ g2.drawString(code,20,100);
+
+ return PAGE_EXISTS;
+ }
+ return NO_SUCH_PAGE;
+ }
+}
diff --git a/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/SelectPrinterInfo.java b/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/SelectPrinterInfo.java
new file mode 100644
index 00000000..822ad991
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/EPSON/Other/SelectPrinterInfo.java
@@ -0,0 +1,57 @@
+package com.dreamchaser.depository_manage.EPSON.Other;
+
+import com.alibaba.fastjson.JSONObject;
+import com.profesorfalken.wmi4java.WMI4Java;
+import org.apache.catalina.Manager;
+
+import javax.print.PrintService;
+import javax.print.attribute.PrintServiceAttributeSet;
+import java.awt.*;
+import java.awt.print.PrinterJob;
+import java.io.PrintStream;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用于实现打印机选择的类
+ */
+public class SelectPrinterInfo {
+
+ public static List GetPrinterInfoList() {
+
+ //定义打印机信息列表
+ List printerInfoList = new ArrayList();
+ PRINTER_INFO printerInfo;
+ try {
+ // 获取本地所有打印机
+ List