Procházet zdrojové kódy

新增打印机联调(测试中)

LinWuTai před 1 rokem
rodič
revize
077f496d54

+ 6 - 0
pom.xml

@@ -149,6 +149,12 @@
                 <version>${kaptcha.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>net.java.dev.jna</groupId>
+                <artifactId>jna</artifactId>
+                <version>5.5.0</version>
+            </dependency>
+
             <!-- 定时任务-->
             <dependency>
                 <groupId>com.ruoyi</groupId>

+ 5 - 0
ruoyi-admin/pom.xml

@@ -73,6 +73,11 @@
             <artifactId>lombok</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>net.java.dev.jna</groupId>
+            <artifactId>jna</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 0 - 12
ruoyi-admin/src/main/java/com/ruoyi/asset/controller/TbAssetInformationController.java

@@ -72,10 +72,6 @@ public class TbAssetInformationController extends BaseController
         return success(tbAssetInformationService.selectTbAssetInformationById(id));
     }
 
-    private boolean checkNumber(String number) {
-        return number.matches("^[A-Fa-f0-9]+$");
-    }
-
     /**
      * 新增资产信息
      */
@@ -85,10 +81,6 @@ public class TbAssetInformationController extends BaseController
     public AjaxResult add(@RequestBody TbAssetInformation tbAssetInformation)
     {
         String number = tbAssetInformation.getNumber();
-        boolean flag = checkNumber(number);
-        if (!flag) {
-            return error("资产编号格式仅限[A-Fa-f0-9]");
-        }
         tbAssetInformation.setCode(number);
         return toAjax(tbAssetInformationService.insertTbAssetInformation(tbAssetInformation));
     }
@@ -102,10 +94,6 @@ public class TbAssetInformationController extends BaseController
     public AjaxResult edit(@RequestBody TbAssetInformation tbAssetInformation)
     {
         String number = tbAssetInformation.getNumber();
-        boolean flag = checkNumber(number);
-        if (!flag) {
-            return error("资产编号格式仅限[A-Fa-f0-9]");
-        }
         tbAssetInformation.setCode(number);
         return toAjax(tbAssetInformationService.updateTbAssetInformation(tbAssetInformation));
     }

+ 35 - 0
ruoyi-admin/src/main/java/com/ruoyi/asset/service/impl/TbAssetInformationServiceImpl.java

@@ -6,6 +6,7 @@ import java.util.List;
 import java.util.Set;
 
 import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.ruoyi.asset.mapper.TbLocationMapper;
 import com.ruoyi.common.exception.ServiceException;
@@ -98,6 +99,10 @@ public class TbAssetInformationServiceImpl implements ITbAssetInformationService
     {
         tbAssetInformation.setCreateTime(DateUtils.getNowDate());
         tbAssetInformation.setCreateBy(SecurityUtils.getUsername());
+        String number = tbAssetInformation.getNumber();
+        String hNumber = checkHNumber(number);
+        tbAssetInformation.setNumber(hNumber);
+        tbAssetInformation.setCode(hNumber);
         return tbAssetInformationMapper.insertTbAssetInformation(tbAssetInformation);
     }
 
@@ -110,11 +115,41 @@ public class TbAssetInformationServiceImpl implements ITbAssetInformationService
     @Override
     public int updateTbAssetInformation(TbAssetInformation tbAssetInformation)
     {
+        String number = tbAssetInformation.getNumber();
+        String hNumber = checkHNumber(number);
+        tbAssetInformation.setNumber(hNumber);
+        tbAssetInformation.setCode(hNumber);
         tbAssetInformation.setUpdateTime(DateUtils.getNowDate());
         return tbAssetInformationMapper.updateTbAssetInformation(tbAssetInformation);
     }
 
     /**
+     * 判断是否为16进制,并将传入编号所有英文大写
+     *
+     * @param number 编号
+     * @return 返回值
+     */
+    private String checkHNumber(String number) {
+        String regex="^[A-Fa-f0-9]+$";
+
+        if (StrUtil.isBlank(number)) {
+            throw new RuntimeException("编号不能为空");
+        }
+        if (number.length() % 4 != 0) {
+            throw new RuntimeException("编号的长度必须为4的倍数");
+        }
+
+        // 大写英文
+        number = number.toUpperCase();
+
+        if (!number.matches(regex)) {
+            throw new RuntimeException("非正则表达式");
+        }
+
+        return number;
+    }
+
+    /**
      * 批量删除资产信息
      * 
      * @param ids 需要删除的资产信息主键

+ 168 - 0
ruoyi-admin/src/main/java/com/ruoyi/ptxlib/PTXConstants.java

@@ -0,0 +1,168 @@
+package com.ruoyi.ptxlib;
+
+/**
+ * PtnxD11CommDef.h 常量设置
+ */
+public class PTXConstants {
+    public static final Double Pi        = 3.14159;
+    public static final Integer SpeedOfLight = 300000; // 千米每秒
+
+    /* PTXA_SetupStatus () 设置状态 */
+    /* Input Parameter - mode */
+    /** Disable snooper 关闭侦听器 */
+    public static final Integer PTXA_SnoopOff         = 0;
+    /** Serial 启用串口侦听器 */
+    public static final Integer PTXA_SnoopSer         = 1;
+    /** Parallel 启用并口侦听器 */
+    public static final Integer PTXA_SnoopPar         = 2;
+    /** Ethernet 启用以太网端口的侦听器 */
+    public static final Integer PTXA_SnoopEth         = 3;
+
+    /* PTXA_JobSetup() 工件设置 */
+    /* Input Parameter - mode  */
+    /** There is not Job parameter setting before the form */
+    public static final Integer PTXA_JobModeReset     = 0;
+    /** Width 宽度 */
+    public static final Integer PTXA_JobModeWidth     = 1;
+    /** Height 高度 */
+    public static final Integer PTXA_JobModeLength    = 2;
+    /** Speed IPS 提速IPS */
+    public static final Integer PTXA_JobModeSpeed     = 3;
+    /** Intensity 强度 */
+    public static final Integer PTXA_JobModeIntensity = 4;
+    /** Label Sensor 标签传感器 */
+    public static final Integer PTXA_JobModeLabel     = 5;
+    /** Media 媒体 */
+    public static final Integer PTXA_JobModeMedia     = 6;
+    /** Rotation 旋转 */
+    public static final Integer PTXA_JobModeRotate    = 7;
+
+    /* Input Parameter - value for PTXA_JobModeLabel 工作模式标签 */
+    /** No sensor 无传感器 */
+    public static final Integer PTXA_JobLabelNoSensor = 0;
+    /** Mark 标记 */
+    public static final Integer PTXA_JobLabelMark     = 1;
+    /** Gap */
+    public static final Integer PTXA_JobLabelGap      = 2;
+    /** Advanced gap 高级间隙 */
+    public static final Integer PTXA_JobLabelAdvGap   = 3;
+    /** Advanced notch 高级凹槽 */
+    public static final Integer PTXA_JobLabelAdvNotch = 4;
+
+    /* Input Prameter - value for PTXA_JobModeMedia 工作模式媒体 */
+    /** Continuous mode 连续模式 */
+    public static final Integer PTXA_JobMediaCon          = 0;
+    /** Tear-off script 撕裂脚本 */
+    public static final Integer PTXA_JobMediaTearoffScrip = 1;
+    /** Tear-off mode 撕裂模式 */
+    public static final Integer PTXA_JobMediaTearoff      = 2;
+    /** peer-off */
+    public static final Integer PTXA_JobMediaPeeroff      = 3;
+    /** Cut */
+    public static final Integer PTXA_JobMediaCut          = 4;
+
+    /* Input Parameter - value for PTXA_JobModeRotate 工作模式轮换 */
+    /** Portrait 肖像 */
+    public static final Integer PTXA_JobRotatePort    = 0;
+    /** Landscape 景观 */
+    public static final Integer PTXA_JobRotateLand    = 90;
+    /** Inverted portrait 倒立画像 */
+    public static final Integer PTXA_JobRotateInvPort = 180;
+    /** Inverted landscape 倒挂景观 */
+    public static final Integer PTXA_JobRotateInvLand = 270;
+
+    /* PTXA_SetBarcode() */
+    /* Input Parameter - bcdtype (for both PTXA_SetBarcode() and PTXA_PrintBarcode()) */
+    /** Code39 */
+    public static final Integer PTXA_BCD_C39          = 0;
+    /** CODE128A */
+    public static final Integer PTXA_BCD_C128A        = 1;
+    /** CODE128B */
+    public static final Integer PTXA_BCD_C128B        = 2;
+    /** CODE128C */
+    public static final Integer PTXA_BCD_C128C        = 3;
+    /** EAN13 */
+    public static final Integer PTXA_BCD_EAN13        = 4;
+    /** UPCA */
+    public static final Integer PTXA_BCD_UPCA         = 5;
+    /** MAXICODE */
+    public static final Integer PTXA_BCD_MAXICODE     = 6;
+    /** QR */
+    public static final Integer PTXA_BCD_QR           = 7;
+    /** PDF417 */
+    public static final Integer PTXA_BCD_PDF417       = 8;
+
+    /* Input Parameter - mode  */
+    /** No optional parameter attach to barcode 没有可选参数附加到条形码*/
+    public static final Integer PTXA_BCDOptParam_RESET   = 0;
+    /** Height 高度 */
+    public static final Integer PTXA_BCDOptParam_HEIGHT  = 1;
+    /** Rotation 旋转 */
+    public static final Integer PTXA_BCDOptParam_ROTATE  = 2;
+    /** Magnify 放大 */
+    public static final Integer PTXA_BCDOptParam_MAGNIFY = 3;
+    /** PDF */
+    public static final Integer PTXA_BCDOptParam_PDF     = 4;
+    /** Ratio */
+    public static final Integer PTXA_BCDOptParam_Ratio   = 5;
+
+    /* Input Parameter - value for PTXA_BCDOptParam_ROTATION */
+    /** Portrait 画像 */
+    public static final Integer PTXA_BcdRotatePort       = 0;
+    /** Landscape 景观 */
+    public static final Integer PTXA_BcdRotateLand       = 90;
+    /** Inverted portrait 倒立画像 */
+    public static final Integer PTXA_BcdRotateInvPort    = 180;
+    /** Inverted landscape 倒挂景观 */
+    public static final Integer PTXA_BcdRotateInvLand    = 270;
+
+    /* Input Parameter - value for PTXA_BCDOptParam_PDF */
+    /** Barcode PDF disabled 条形码PDF禁用 */
+    public static final Integer PTXA_BcdPDFOff = 0;
+    /** Barcode PDF enabled 条形码PDF启用 */
+    public static final Integer PTXA_BcdPDFOn  = 1;
+
+    /* PTXA_FormSetup() */
+    /* Input Parameters - mode  */
+    /** form length set to CREATE form 表单长度设置为创建表单 */
+    public static final Integer PTXA_FormSetupLength = 1;
+    /** counter of execute the form 执行形式的计数器 */
+    public static final Integer PTXA_FormSetupCount  = 2;
+
+    /* PTXA_FontSetup() */
+    /** FontName 字体名 */
+    public static final Integer PTXA_FontName     = 0;
+    /** FontBold 字体加粗 */
+    public static final Integer PTXA_FontBold     = 1;
+    /** FontSlant 字体倾斜 */
+    public static final Integer PTXA_FontSlant    = 2;
+    /** FontEncoding 字体编码 */
+    public static final Integer PTXA_FontEncoding = 3;
+
+    /** Bold on 加粗(开) */
+    public static final String PTXA_BoldOn     = "ON";
+    /** Bold off 加粗(关) */
+    public static final String PTXA_BoldOff    = "OFF";
+    /** Italic slant 右斜体 */
+    public static final String PTXA_SlantRight = "R";
+    /** Backward slant 左倾斜 */
+    public static final String PTXA_SlantLeft  = "L";
+    /** ASCII encoding ASCII编码 */
+    public static final String PTXA_CPAscii    = "ASCII";
+    /** GB encoding GB编码 */
+    public static final String PTXA_CPGB       = "GB";
+    /** Big5 for TaiWan encoding 台湾编码 */
+    public static final String PTXA_CPBig5     = "BIG5";
+    /** Korean encoding 韩文编码 */
+    public static final String PTXA_CPKSC      = "KSC";
+    /** Kanji SJIS for Japan encoding 日本韩式SJIS编码 */
+    public static final String PTXA_CPSJIS     = "SJIS";
+    /** UTF-8 encoding UTF-8编码 */
+    public static final String PTXA_CPUTF8     = "UTF8";
+
+    /* Return value from APIs API返回值 */
+    /** good in return 操作成功 */
+    public static final Integer PTXA_OK      = 0;
+    /** wrong input parameter – mode/value/lForm/barcodetype 操作失败 */
+    public static final Integer PTXA_INVALID = 1;
+}

+ 610 - 0
ruoyi-admin/src/main/java/com/ruoyi/ptxlib/PTXLib.java

@@ -0,0 +1,610 @@
+package com.ruoyi.ptxlib;
+
+import com.sun.jna.Library;
+import com.sun.jna.Native;
+import com.sun.jna.ptr.IntByReference;
+
+/**
+ * PTX库工具包
+ */
+public interface PTXLib extends Library {
+    /**
+     * "PTXLIB" 文件名称,不包括后缀
+     *  PTXLib.class 类名
+     *  调用:
+     *      PTXLib.INSTANCE.XXX
+     */
+    PTXLib INSTANCE = Native.load("PTXLIB", PTXLib.class);
+
+    /**
+     * 初始化DLL<br/>
+     * 该API将初始化DLL。这是用户应用程序调用的第一个API,在使用任何其他API之前。
+     */
+    void PTXA_DLLinit();
+
+    /**
+     * 退出DLL<br/>
+     * 该API将释放DLL内所有已分配的内存。这是最后一个API,在DLL调用结束前有用户应用程序调用。
+     */
+    void PTXA_DLLexit();
+
+    /**
+     * 获取DLL版本<br/>
+     * 该API将返回PTNX DLL版本
+     *
+     * @return Ptnx DLL版本
+     */
+    IntByReference PTXA_GetDllVersion();
+
+    /**
+     * 重置打印机<br/>
+     * 该API将重置打印机,使用PTX_SETUP命令
+     *
+     * @return reset命令将以NULL(‘\0')字符结束
+     */
+    IntByReference PTXA_PrinterReset();
+
+    /**
+     * 设置打印机状态<br/>
+     * 该API将启用或禁用侦听器
+     *
+     * @param mode <br/>
+     * PTXA_SnoopSer 启用串口侦听器<br/>
+     * PTXA_SnoopPar 启用并口侦听器<br/>
+     * PTXA_SnoopEth 启用以太网端口的侦听器<br/>
+     * PTXA_SnoopOff 关闭侦听器<br/>
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_SetupStatus(Integer mode);
+
+    /**
+     * 获取打印机状态<br/>
+     * 这个API返回PGL STATUS命令,用户可以将结果发送到打印机,通知打印机通过他们打开的端口将打印机状态发送回用户的应用程序。
+     *
+     * @return 状态
+     */
+    IntByReference PTXA_GetStatus();
+
+    /**
+     * 设置打印机属性<br/>
+     * 该API将在正常模式下使用PGL PAPER命令逐一设置打印机属性。值定义遵循PGL PAPER命令标准
+     *
+     * @param mode 下面的描述了PtnxDIlCommDef.h中的常量。
+     * @param value 下面的描述了PtnxDIICommDef.h中的常量。<br/>
+     * <table border=0 cellspacing=4 cellpadding=2>
+     *  <tr>
+     *    <th align=centen>mode</th>
+     *    <th align=centen>units</th>
+     *    <th align=centen>value</th>
+     *    <th align=centen>comments</th>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_JobModeReset</td>
+     *    <td>n/a</td>
+     *    <td>n/a</td>
+     *    <td>重置模式参数不会链接表单的任何模式参数</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_JobModeWidth</td>
+     *    <td>0.0001"</td>
+     *    <td>100 - 8500</td>
+     *    <td>基于模型的最大宽度</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_JobModeLength</td>
+     *    <td>0.0001"</td>
+     *    <td>100-99000</td>
+     *    <td>范围 0.1“ - 99</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_JobModeSpeed</td>
+     *    <td>IPS</td>
+     *    <td>1 - 14</td>
+     *    <td>最大IPS因型号而异</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_JobModeIntensity</td>
+     *    <td>n/a</td>
+     *    <td>100-8500</td>
+     *    <td></td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_JobModeLabel</td>
+     *    <tb>右同</tb>
+     *    <td>
+     *       PTXA_JobLabelNoSensor<br/>
+     *       PTXA_JobLabelMark<br/>
+     *       PTXA_JobLabelGap<br/>
+     *       PTXA_JobLabelAdvGap<br/>
+     *       PTXA_JobLabelAdvNotch<br/>
+     *    </td>
+     *    <td>并非所有模式都可用,请参阅PGL程序员参考手册中的PAPER命令</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_JobModeMedia</td>
+     *    <tb>右同</tb>
+     *    <td>
+     *      PTXA_JobMediaCon<br/>
+     *      PTXA_JobMediaTearoffStrip<br/>
+     *      PTXA_JobMediaTearoff <br/>
+     *      PTXA_JobMediaPeeloff<br/>
+     *      PTXA_JobMediaCut<br/>
+     *    </td>
+     *    <td>请注意,并非所有模式都可用来自PGL的PAPER命令程序员参考手册</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_JobModeRotate a</td>
+     *    <tb>Degrees</tb>
+     *    <td>0, 90, 180, 270</td>
+     *    <td></td>
+     *  </tr>
+     * </table>
+     *
+     * @return 0, 90, 180, 270
+     */
+    Integer PTXA_JobSetup(Integer mode, Integer value);
+
+    /**
+     * 创建Form表单<br/>
+     * 请求创建表单,使用PGL create命令
+     *
+     * @param FormName Description创建表单的名称
+     * @return 0 - 1000 创建的表单。保存此值并在窗体中创建图形时使用。
+     */
+    Integer PTXA_CreateForm(String FormName);
+
+    /**
+     * 设置表单参数
+     *
+     * @param mode <br/>
+     * PTXA_FormSetupLen 表单长度: IGP点或1/72“的形式长度<br/>
+     * PTXA_FormSetupCount 执行次数:执行表单的次数
+     * @param value <br/>
+     * PTXA_FormSetupLen: 0 – 65536<br/>
+     * PTXA_FormSetupCount: 1 – 999
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_FormSetup(Integer mode, Integer value);
+
+    /**
+     * 设置清晰度<br/>
+     * 为点行和列指定的数据定位定义表单的垂直线和水平间距。<br/>
+     * 使用PGL SCAl F-DOT命令。<br/>
+     * l默认的比例是字符行/列,当设置了这个api后,表格的比例将改为点行/列
+     *
+     * @param hdpi 水平分辨率,默认为60dpi
+     * @param vdpi 垂直分辨率,默认为72dpi
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_Scale(Integer hdpi, Integer vdpi);
+
+    /**
+     * 绘制方框。<br/>
+     * 使用PGL box命令
+     *
+     * @param lForm 0-1000 <br/> 待打印表格
+     * @param LT 1 - 表单长度 <br/>  线条粗细,输入1或更大的值。
+     * @param SR 0 - 表单长度 <br/> 盒子的起始行。根据比例设置,该参数可以是点行或字符行。不支持CP.DP格式。默认值是字符行。
+     * @param SC 0 - 表单宽度 <br/> 盒子的起始列。根据比例设置,该参数可以是点列或字符列。不支持CP.DP格式。默认是字符列。
+     * @param ER 0 - 表单宽度 <br/> 盒子的结束行。根据比例设置,该参数可以是点行或字符行。不支持CP.DP格式。默认值是字符行。
+     * @param EC 0 - 表单宽度 <br/> 盒子的结束列。根据比例设置,该参数可以是点列或字符列。不支持CP.DP格式。默认是字符列。
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_DrawBox(Integer lForm, Integer LT, Integer SR, Integer SC, Integer ER, Integer EC);
+
+    /**
+     * 绘制线条。<br/>
+     * 根据参数SR SC ER EC,它将使用PGLDIAG/HORZ/VERT命令在DLL内相应地确定。
+     *
+     * @param lForm 0-1000 <br/> 待打印表格
+     * @param LT 1 - 表单长度 <br/> 线条粗细,输入1或更大的值。
+     * @param SR 0 - 表单长度 <br/> 盒子的起始行。根据比例设置,该参数可以是点行或字符行。不支持CP.DP格式。默认值是字符行。
+     * @param SC 0 - 表单宽度 <br/> 盒子的起始列。根据比例设置,该参数可以是点列或字符列。不支持CP.DP格式。默认是字符列。
+     * @param ER 0 - 表单宽度 <br/> 盒子的结束行。根据比例设置,该参数可以是点行或字符行。不支持CP.DP格式。默认值是字符行。
+     * @param EC 0 - 表单宽度 <br/> 盒子的结束列。根据比例设置,该参数可以是点列或字符列。不支持CP.DP格式。默认是字符列。 <br/>
+     * 请注意: <br/>
+     * 1.当SR<>ER和SC<>EC时,使用DIAG <br/>
+     * 2.当SR==ER时,使用HORZ <br/>
+     * 3.当SC==EC时,使用VERT <br/>
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_DrawLine(Integer lForm, Integer LT, Integer SR, Integer SC, Integer ER, Integer EC);
+
+    /**
+     * 定义和定位静态数据字段上的ASCII文本
+     *
+     * @param lForm 0-1000 <br/> 待打印表格
+     * @param SR 0 - 表单长度 <br/> 根据比例设置,该参数可以是点行或字符行。不支持CP.DP格式。默认值是字符行。
+     * @param SC 0 - 表单宽度 <br/> 根据比例设置,该参数可以是点列或字符列。不支持CP.DP格式。默认是字符列。
+     * @param VE 0 - 63   <br/>   垂直扩展是默认高度的倍数。
+     * @param HE 0 - 63   <br/>   水平展开是默认宽度的倍数。
+     * @param data 文本字符串数据  要打印的字符串数据。该函数将使用“*”字符作为数据的默认分隔符。如果使用“*”作为数据的一部分,它将使用另一个可打印字符作为分隔符(由DLL内部决定)。
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_PrintTextEng(Integer lForm, Integer SR, Integer SC, Integer VE, Integer HE, String data);
+
+    /**
+     * 在静态数据字段上定义和定位ASCII或汉字文本
+     *
+     * @param lForm 0-1000 <br/> 待打印表格
+     * @param SR 0 - 表单长度 <br/> 根据比例设置,该参数可以是点行或字符行。不支持CP.DP格式。默认值是字符行。
+     * @param SC 0 - 表单宽度 <br/> 根据比例设置,该参数可以是点列或字符列。不支持CP.DP格式。默认是字符列。
+     * @param VE 0 - 63   <br/>   垂直扩展是默认高度的倍数。
+     * @param HE 0 - 63   <br/>   垂直扩展是默认高度的倍数。
+     * @param data 文本字符串数据 <br/> 要打印的字符串数据。该函数将使用“*”字符作为数据的默认分隔符。如果使用“*”作为数据的一部分,它将使用另一个可打印字符作为分隔符(由DLL内部决定)。
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_PrintTextCH(Integer lForm, Integer SR, Integer SC, Integer VE, Integer HE, String data);
+
+    /**
+     *
+     * @param filename
+     * @param logoname
+     * @return
+     */
+    Integer PTXA_DownloadPCX(String filename, String logoname);
+
+    /**
+     * 打印商标
+     *
+     * @param lForm 0-1000 <br/> 待打印表格
+     * @param SR 0 - 表单长度 <br/> 根据比例设置,该参数可以是点行或字符行。不支持CP.DP格式。默认值是字符行。
+     * @param SC 0 - 表单宽度 <br/> 根据比例设置,该参数可以是点列或字符列。不支持CP.DP格式。默认是字符列。
+     * @param logoname 徽标必须在PGL <br/> NORMAL模式下通过-LOGO预先定义,或在PGL CREATE模式下通过LOGODEF预先定义。
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_PrintImage(Integer lForm, Integer SR, Integer SC, String logoname);
+
+    /**
+     * 设置条形码的可选参数.<br/>
+     * 该API需要之前调用PTXA_PrintBarcode(),参数依次设置
+     *
+     * @param BcdType 条形码符号学的类型。常量在PtnxD11CommDef.h中定义。 <br/>
+     * PTXA_BCD_C39 <br/>
+     * PTXA_BCD_C128A <br/>
+     * PTXA_BCD_C128B <br/>
+     * PTXA_BCD_C128C <br/>
+     * PTXA_BCD_EAN13 <br/>
+     * PTXA_BCD_UPCA <br/>
+     * PTXA_BCD_MAXICODE <br/>
+     * PTXA_BCD_QR <br/>
+     * PTXA_BCD_PDF417 <br/>
+     * @param mode 确定要更改的条形码特性。 见下表。请注意,并非所有模式都可以与每个条形码类型组合,如表2所示。
+     * @param value mode的值,ASCII文本格式 <br/>
+     * <table border=0 cellspacing=3 cellpadding=2>
+     *  <tr>
+     *    <th align=centen>mode</th>
+     *    <th align=centen>value</th>
+     *    <th align=centen>comments</th>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_BCDOptParam_RESET</td>
+     *    <td>没有要求</td>
+     *    <td>将所有值更改回默认值</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_BCDOptParam_HEIGHT</td>
+     *    <td>新墨西哥州的格式</td>
+     *    <td>条码符号整体高度,数值格式为n.m,其中n为十分之一英寸,m = IGP点</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_BCDOptParam_ROTATION</td>
+     *    <td>
+     *       PTXA_BcdRotatePort <br/>
+     *       PTXA_BcdRotateLand <br/>
+     *       PTXA_BcdRotateInvPort <br/>
+     *       PTXA_BcdRotateInvLand <br/>
+     *    </td>
+     *    <td>
+     *       旋转:0度 <br/>
+     *       旋转:90度 <br/>
+     *       旋转:180度 <br/>
+     *       旋转:270度 <br/>
+     *    </td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_BCDOptParam_MAGNIFY</td>
+     *    <td>X1, X1A, X2</td>
+     *    <td>指定要使用的内置条码比率(例如,X1, X1A, X2)。有关可用选项,请参阅PGL程序员参考手册。</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_BCDOptParam_PDF</td>
+     *    <td>
+     *       PTXA_BcdPDFOff <br/>
+     *       PTXA_BcdPDFOn
+     *    </td>
+     *    <td>PDF启用可打印数据字段。</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_BCDOptParam_RATIO</td>
+     *    <td>窄条:窄空间:宽条:宽空间</td>
+     *    <td>根据PGL程序员的Rfrca提供您自己的窄条和宽条值</td>
+     *  </tr>
+     * </table><br/>
+     * 注意:并非所有的模式都可以与所有的条形码类型组合,有效的组合如下,它将在DLL内检查,详细信息可参考PGL程序员参考手册。<br/>
+     * 表二:<br/>
+     * <table border=0 cellspacing=2 cellpadding=2>
+     *  <tr>
+     *    <th align=centen>条码类型</th>
+     *    <th align=centen>可用模式</th>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_BCD_C39</td>
+     *    <td>
+     *       PTXA_BCDOptParam_HEIGHT
+     *       PTXA_BCDOptParam_ROTATION
+     *       PTXA_BCDOptParam_MAGNIFY
+     *       PTXA_BCDOptParam_PDF
+     *    </td>
+     *  </tr>
+     *  <tr>
+     *    <td>
+     *       PTXA_BCD_C128A
+     *       PTXA_BCD_C128B
+     *       PTXA_BCD_C128C
+     *    </td>
+     *    <td>
+     *       PTXA_BCDOptParam_HEIGHT
+     *       PTXA_BCDOptParam_ROTATION
+     *       PTXA_BCDOptParam_MAGNIFY
+     *       PTXA_BCDOptParam_PDF
+     *    </td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_BCD_EAN13</td>
+     *    <td>
+     *       PTXA_BCDOptParam_HEIGHT
+     *       PTXA_BCDOptParam_ROTATION
+     *       PTXA_BCDOptParam_MAGNIFY
+     *       PTXA_BCDOptParam_PDF
+     *    </td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_BCD_UPCA</td>
+     *    <td>
+     *       PTXA_BCDOptParam_HEIGHT
+     *       PTXA_BCDOptParam_ROTATION
+     *       PTXA_BCDOptParam_MAGNIFY
+     *       PTXA_BCDOptParam_PDF
+     *    </td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_BCD_MAXICODE</td>
+     *    <td>PTXA_BCDOptParam_ROTATION</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_BCD_QR</td>
+     *    <td>
+     *       PTXA_BCDOptParam_ROTATION
+     *       PTXA_BCDOptParam_RATIO
+     *       (只有x维度的打印机点)
+     *    </td>
+     *  </tr>
+     *  <tr>
+     *     <td>PTXA_BCD_PDF417</td>
+     *     <td>PTXA_BCDOptParam_ROTATION</td>
+     *  </tr>
+     * </table>
+     *
+     * @return
+     */
+    Integer PTXA_SetBarcode(Integer BcdType, Integer mode, String value);
+
+    /**
+     * 指定的条形码将包含在表格中。
+     *
+     * @param lForm 0-1000 <br/> 待打印表格
+     * @param BcdType 条形码符号学的类型。<br/>
+     * PTXA_BCD_C39 <br/>
+     * PTXA_BCD_C128A<br/>
+     * PTXA_BCD_C128B<br/>
+     * PTXA_BCD_C128C<br/>
+     * PTXA_BCD_EAN13<br/>
+     * PTXA_BCD_UPCA<br/>
+     * PTXA_BCD_MAXICODE<br/>
+     * PTXA_BCD_QR<br/>
+     * PTXA_BCD_PDF417<br/>
+     * @param SR 0 - 表单长度 <br/> 根据比例设置,该参数可以是点行或字符行。不支持CP.DP格式。默认值是字符行。
+     * @param SC 0 - 表单宽度 <br/> 根据比例设置,该参数可以是点列或字符列。不支持CP.DP格式。默认是字符列。
+     * @param data 文本字符串数据 <br/> 要打印的字符串数据。该函数将使用“*”字符作为数据的默认分隔符。如果使用“*”作为数据的一部分,它将使用另一个可打印字符作为分隔符(由DLL内部决定)。
+     *
+     * @return 操作成功/失败,参数无效:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_PrintBarcode(Integer lForm, Integer BcdType, Integer SR, Integer SC, String data);
+
+    /**
+     * 将PTXA_CreateForm创建的表单返回并发送给用户应用程序,<br/>
+     * DLL将根据用户应用程序的输入执行API并生成PGL表单(包括打印机设置和创建表单),将保存整个PGL程序的缓冲区指针返回给用户应用程序。<br/>
+     * 调用者可以将它们发送到打印机或重新存储到用户应用程序中的特定内存中。
+     *
+     * @param lForm 0 - 1000 <br/> 待打印表格
+     * @return 指向缓冲区的指针 P指向保存整个PGL程序的缓冲区的指针,以“\0”结尾。
+     */
+    IntByReference PTXA_PrintForm(Integer lForm);
+
+    /**
+     * 将PTXA_PrintForm创建的表单数据复制到用户缓冲区中。
+     *
+     * @param lForm 0 - 1000 <br/> 待打印表格
+     * @return 指向缓冲区的指针 P指向保存整个PGL程序的缓冲区的指针,以“\0”结尾。
+     */
+    IntByReference PTXA_GetFormData(Integer lForm);
+
+    /**
+     * 为RFID设置参数
+     *
+     * @param length 0 - 1000 <br/> 指定标记内字段位长度的十进制数
+     * @param incremental True/False <br/> 该参数将位字段从非增量数据格式设置为增量固定数据格式。
+     * @param format B\D\H <br/> 此参数指定密码数据的格式。B表示二进制,D表示十进制,H表示十六进制。
+     * @param increment_amount 0 - 1000 <br/> 如果bit字段是增量固定数据格式,则此参数指定每次执行表单时要增加的数量。
+     * @param data 文本字符串数据 <br/> 要打印的字符串数据。该函数将使用“*”字符作为数据的默认分隔符。如果使用“*”作为数据的一部分,它将使用另一个可打印字符作为分隔符(由DLL内部决定)。
+     *
+     * @return 操作成功/失败,参数无效:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_SetupRFID(Integer length, Boolean incremental, String format, Integer increment_amount, String data);
+
+    /**
+     * 编写RFID标签
+     *
+     * @param lForm 0 - 1000 <br/> 包含RFID的表格
+     * @param LOCK 1 - FFFFFFFF <br/> 可选参数,用于锁定数据块,防止数据块被覆盖
+     * @param membank 指定将应用此命令的哪个标记逻辑内存区域 <br/>
+     * EPC <br/>
+     * TID <br/>
+     * USR <br/>
+     * ACS <br/>
+     * KIL <br/>
+     * PC
+     *
+     * @return 操作成功/失败,参数无效:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_WriteRFID(Integer lForm, String LOCK, String membank);
+
+    /**
+     * 将RFID标签的内容读取到一个动态字段中,并请求打印机将ASCll表示发送给主机。
+     *
+     * @param lForm 0 - 1000 <br/> 包含RFID的表格
+     * @param UNLOCK 1 - FFFFFFFF <br/> 可选参数解锁数据块,以便它可以稍后被覆盖
+     * @param membank 指定将应用此命令的哪个标记逻辑内存区域<br/>
+     * EPC<br/>
+     * TID<br/>
+     * USR<br/>
+     * ACS<br/>
+     * KIL<br/>
+     * PC<br/>
+     * @param length 0 - 1000 <br/> 指定RFID标签存储库的总位长度的十进制数
+     * @param format B\D\H <br/> 此参数指定密码数据的格式。B表示二进制,D表示十进制,H表示十六进制。
+     *
+     * @return 操作成功/失败,参数无效:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_VerifyRFID(Integer lForm, String UNLOCK, String membank, Integer length, String format);
+
+    /**
+     * 设置文本字体
+     *
+     * @param mode 见下表
+     * @param value 见下表<br/>
+     * <table border=0 cellspacing=3 cellpadding=2>
+     *  <tr>
+     *    <th align=centen>mode</th>
+     *    <th align=centen>value</th>
+     *    <th align=centen>comments</th>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_FontName</td>
+     *    <td>string</td>
+     *    <td>标识特定的字体</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_FontBold</td>
+     *    <td>
+     *       PTXA_BoldOn <br/>
+     *       PTXA_BoldOff
+     *    </td>
+     *    <td>选择粗体属性</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_FontSlant</td>
+     *    <td>
+     *       PTXA_SlantRight <br/>
+     *       PTXA_SlantLeft
+     *    </td>
+     *    <td>选择一个字体倾斜</td>
+     *  </tr>
+     *  <tr>
+     *    <td>PTXA_FontEncoding</td>
+     *    <td>
+     *       PTXA_CPAscii <br/>
+     *       PTXA_CPGB <br/>
+     *       PTXA_CPBig5 <br/>
+     *       PTXA_CPKSC <br/>
+     *       PTXA_CPSJIS <br/>
+     *       PTXA_CPUTF8 <br/>
+     *    </td>
+     *    <td>选择一个字体编码</td>
+     *  </tr>
+     * </table>
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_FontSetup(Integer mode, String value);
+
+    /**
+     * 按照请求的数据长度将PTXA_PrintForm创建的表单数据复制到用户的缓冲区中。
+     *
+     * @param EndLine 返回数据的结束符号
+     * @return 指向保存回送数据的缓冲区的指针
+     */
+    IntByReference PTXA_Read(String EndLine);
+
+    /**
+     *
+     * @return
+     */
+    Integer about();
+
+    /**
+     * 打开端口<br/>
+     * 该API将启动打印机轴
+     *
+     * @param printername <br/>
+     * 对于本地打印机,请指定打印机驱动程序名称,如:tpp-244 Plus<br/>
+     * 对于网络打印机,请指定UNC路径和打印机名称,如:lserverlTTP243<br/>
+     * 如果是中心接口,请指定LPT1 ~ LPT4,如:LPT1<br/>
+     * 如需直接使用USB接口,请指定USB,如:USB<br/>
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer openport(String printername);
+
+    /**
+     * 开放以太网<br/>
+     * 该API将打开一个以太网连接
+     *
+     * @param ipaddress IP地址,如:192.168.2.33
+     * @param portnumber 端口号
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer openethernet(String ipaddress, Integer portnumber);
+
+    /**
+     * 关闭端口<br/>
+     * 该API将关闭打印机轴
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer closeport();
+
+    /**
+     * 发送命令到打印机
+     *
+     * @param printercommand 发送的打印机命令。
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer sendcommand(String printercommand);
+
+    /**
+     *
+     * @param lForm
+     * @param printercommand 发送的打印机命令。
+     *
+     * @return 操作成功/失败:<br/> PTXA_OK/PTXA_INVALID
+     */
+    Integer PTXA_SendCommand(Integer lForm, String printercommand);
+
+    /**
+     *
+     * @param printerCommand
+     * @param CommandLength
+     * @return
+     */
+    Integer sendBinaryDataNoCRLF(byte[] printerCommand, Integer CommandLength);
+}

+ 161 - 0
ruoyi-admin/src/main/java/com/ruoyi/ptxlib/PTXService.java

@@ -0,0 +1,161 @@
+package com.ruoyi.ptxlib;
+
+import cn.hutool.core.util.StrUtil;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+
+public class PTXService {
+    /**
+     * 创建表单
+     *
+     * @param pid 分辨率
+     */
+    public void createForm(String pid)
+    {
+        if (pid == null) {
+            pid = "300";
+        }
+        String cmd = "~CREATE;formName;X\r\nSCALE;DOT;" + pid + ";" + pid + "\r\nFONT;SYMSET 'UTF8'\r\n";//创建表单,分辨率为203,如是300点机器,请改为300;300
+        PTXLib.INSTANCE.sendcommand(cmd);
+    }
+
+    /**
+     * 字体加粗
+     *
+     * @param bold 是否加粗
+     */
+    public void setBold(boolean bold)
+    {
+        String cmd;
+        if (bold)
+        {
+            cmd = "FONT;NAME 92244.sf;BOLD 1\r\n";
+        }
+        else
+        {
+            cmd = "FONT;NAME 92244.sf;BOLD 0\r\n";
+        }
+        PTXLib.INSTANCE.sendcommand(cmd);
+
+    }
+
+    /**
+     * 打印表单
+     */
+    public void printForm()
+    {
+        String cmd = "END\r\n~EXECUTE;formName\r\n~NORMAL\r\n";
+        PTXLib.INSTANCE.sendcommand(cmd);
+    }
+
+    /**
+     * 使用中文字体进行打印
+     *
+     * @param X x轴坐标
+     * @param Y y轴坐标
+     * @param VE x轴垂直扩展间距 行高
+     * @param he Y轴垂直扩展间距 行高
+     * @param data 打印数据
+     */
+    public void printText(String X,String Y,String VE,String he,String data) {
+        //使用字体为SIMHEI.TTF来打印中文,如打印内容中包含*,请修改data前后的*,变为内容中不会包含的符号
+        String cmd = "FONT;NAME SIMHEI.TTF\r\nTWOBYTE\r\nPOINT;"+Y+";"+X+";"+VE+";"+he+";*"+data+"*\r\nSTOP\r\n";
+
+        byte[] data1 = new byte[1024];
+        try {
+            data1=cmd.getBytes("UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        PTXLib.INSTANCE.sendBinaryDataNoCRLF(data1,data1.length);
+    }
+
+    /**
+     * 使用内部字体打印英文
+     *
+     * @param X x轴坐标
+     * @param Y y轴坐标
+     * @param VE x轴垂直扩展间距 行高
+     * @param he Y轴垂直扩展间距 行高
+     * @param data 打印数据
+     */
+    public void printTextEn(String X,String Y,String VE,String he,String data)
+    {
+        String cmd = "ALPHA\r\nPOINT;"+Y+";"+X+";"+VE+";"+he+";*"+data+"*\r\nSTOP\r\n";//仅可用来打印英文及数字,如打印内容中包含*,请修改data前后的*,变为内容中不会包含的符号
+        //PTXLIBDLL.INSTANCE.sendcommand(cmd);
+        byte[] data1 = new byte[1024];
+        data1=cmd.getBytes(StandardCharsets.UTF_8);
+        PTXLib.INSTANCE.sendBinaryDataNoCRLF(data1,data1.length);
+    }
+
+    public void writeRFID(String EPC) {
+        String RFID_format = "H"; // 十六进
+        String regex="^[A-Fa-f0-9]+$";
+
+        if (StrUtil.isBlank(EPC)) {
+            throw new RuntimeException("EPC不能为空");
+        }
+        if (EPC.length() % 4 != 0) {
+            throw new RuntimeException("EPC的长度必须为4的倍数");
+        }
+
+        // 大写英文
+        EPC = EPC.toUpperCase();
+
+        if (!EPC.matches(regex)) {
+            throw new RuntimeException("非正则表达式");
+        }
+
+        String cmd2="RFWTAG;96;EPC\n96;"+ RFID_format +";*"+EPC+"*\nSTOP\n";//向EPC内写入数据指令,其中的96参数为写入数据长度*4
+
+        // 将EPC写入指令发送至打印机,其余PGL指令均可有sendcommand方法发送至打印机内使用
+        PTXLib.INSTANCE.sendcommand(cmd2);
+    }
+
+    /**
+     * 打印二维码
+     *
+     * @param X
+     * @param Y
+     * @param width
+     * @param data
+     */
+    public void printQrCode(String X,String Y,String width,String data)
+    {
+
+        String cmd = "BARCODE\r\nQRCODE;XD"+width+";"+Y+";"+X+"\r\n*"+data+"*\r\nSTOP\r\n";//打印QRCODE二维码,如打印内容中包含*,请修改data前后的*,变为内容中不会包含的符号
+        byte[] data1 = new byte[1024];
+        try {
+            data1=cmd.getBytes("UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        PTXLib.INSTANCE.sendBinaryDataNoCRLF(data1,data1.length);
+    }
+
+    /**
+     * 打印128一维码
+     *
+     * @param X
+     * @param Y
+     * @param width
+     * @param data
+     * @param read
+     * @param high
+     */
+    public void printCode128(String X,String Y,int width,String data,Boolean read,double high)
+    {
+        String cmd;
+        if(read){
+            cmd = "BARCODE\r\nC128A;XRD" + width * 1 + ":" + width * 1 + ":" + width * 2 + ":" + width * 2 + ":" + width * 3 + ":" + width * 3 + ":" + width * 4 + ":" + width * 4 + ";H" + high + ";" + Y + ";" + X + "\r\n*" + data + "*\r\nPDF\r\nSTOP\r\n";
+        }
+        else{
+            cmd = "BARCODE\r\nC128A;XRD" + width * 1 + ":" + width * 1 + ":" + width * 2 + ":" + width * 2 + ":" + width * 3 + ":" + width * 3 + ":" + width * 4 + ":" + width * 4 + ";H" + high + ";" + Y + ";" + X + "\r\n*" + data + "*\r\nSTOP\r\n";
+        }
+        PTXLib.INSTANCE.sendcommand(cmd);
+
+    }
+}

+ 57 - 0
ruoyi-admin/src/main/java/com/ruoyi/ptxlib/WindowsFormApp.java

@@ -0,0 +1,57 @@
+package com.ruoyi.ptxlib;
+
+import cn.hutool.core.util.StrUtil;
+
+import static com.ruoyi.ptxlib.PTXConstants.*;
+
+public class WindowsFormApp {
+    public static void func1() {
+        // 初始化
+        PTXLib.INSTANCE.PTXA_DLLinit();
+        // 打开端口拦截
+        PTXLib.INSTANCE.openport("USB"); // 使用USB口打印
+        // 设置打印头 300*300
+        PTXLib.INSTANCE.PTXA_Scale(300, 300);
+        // 设置字体样式 MSGBL.TTF
+        PTXLib.INSTANCE.PTXA_FontSetup(PTXA_FontName, "MSGBL.TTF");
+        // 设置字体编码 UTF-8
+        PTXLib.INSTANCE.PTXA_FontSetup(PTXA_FontEncoding, PTXA_CPUTF8);
+        // 设置字体加粗
+        PTXLib.INSTANCE.PTXA_FontSetup(PTXA_FontBold, PTXA_BoldOn);
+        // 创建表单
+        Integer lForm = PTXLib.INSTANCE.PTXA_CreateForm("formName");
+
+        PTXLib.INSTANCE.PTXA_PrintTextEng(lForm,0, 35,10,10,"uuid3304");
+
+        PTXLib.INSTANCE.PTXA_PrintForm(lForm);
+
+        PTXLib.INSTANCE.closeport();
+    }
+
+    public static void main(String[] args) {
+        PTXService ptxService = new PTXService();
+
+        String EPC = "10ac0002";
+
+        PTXLib.INSTANCE.PTXA_DLLinit();
+        //打印文字及条码
+        PTXLib.INSTANCE.openport("USB"); // 使用USB口打印
+        // PTXLib.INSTANCE.openethernet("10.100.33.107",9100);//使用网口打印,打印PORT默认为9100,可在打印机内修改
+        // PTXLib.INSTANCE.PTXA_DownloadPCX("UL.PCX", "UL");//下载UL.PCX至打印机,此项下载需在createform之前
+
+        ptxService.createForm("300");//创建一个表单
+
+        ptxService.setBold(true); // 使用内部字体打印时,可以选择是否加粗,单独下载的自由字体此功能无效
+
+        ptxService.printText("5","85","10","10","简体中文测试test ");//使用中文字体进行打印,可选配字库卡
+        ptxService.printTextEn("5","35","10","10","uuid7799uuid7799uuid");//使用内部字体打印英文
+        ptxService.writeRFID(EPC);
+
+//        ptxService.printCode128("100", "60", 2, "barcodetest", true,5.14);//打印code128一维码,high高度单位为0.1英寸,包含码文是最小为4,不包含码文是最小为3,最大99
+//        ptxService.printQrCode("100","200","5","QRCODETEST");//打印QRCODE二维码
+        //PTXLIBDLL.INSTANCE.sendcommand("LOGO\r\n8;8;UL\r\nSTOP\r\n")将UL.PCX图片打印出来
+        ptxService.printForm();//打印此表单
+
+        PTXLib.INSTANCE.closeport();
+    }
+}

binární
ruoyi-admin/src/main/resources/win32-x86-64/PTXLIB.dll