feat(scanner): 增加设备参数获取与管理功能
- 新增HGLibDeviceParam构造函数支持Pointer初始化 - 新增HGLibDeviceParamGroup构造函数支持Pointer初始化 - 新增getDeviceParam方法获取设备参数结构体- 新增getIntDeviceParam、getEnumDeviceParam等类型安全的参数获取方法 - 新增getDeviceParamGroupList方法获取参数组列表 - 新增getDeviceParamsByGroup方法获取指定组的参数列表 - 新增resetDeviceParam方法重置设备参数 - 新增getDeviceParamDescription方法获取参数描述信息 - 引入IntByReference类用于参数计数引用传递 - 调整Maven GPG插件和Central发布插件配置至release profile - 升级项目版本号从1.0.2到1.0.3
This commit is contained in:
85
pom.xml
85
pom.xml
@ -7,7 +7,7 @@
|
||||
<!-- 基本信息 -->
|
||||
<groupId>vip.jcfd</groupId>
|
||||
<artifactId>HuaGoScanner-SDK</artifactId>
|
||||
<version>1.0.2</version>
|
||||
<version>1.0.3</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<!-- 项目信息 -->
|
||||
@ -102,48 +102,6 @@
|
||||
<target>11</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Maven GPG Plugin - 用于签名构件 -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-gpg-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>sign-artifacts</id>
|
||||
<phase>verify</phase>
|
||||
<goals>
|
||||
<goal>sign</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<!-- 使用环境变量中的gpg密钥密码 -->
|
||||
<passphrase>${env.GPG_PASSPHRASE}</passphrase>
|
||||
<!-- 指定GPG可执行文件路径 -->
|
||||
<executable>gpg</executable>
|
||||
<!-- 使用默认密钥 -->
|
||||
<useAgent>true</useAgent>
|
||||
<!-- 设置gpg主目录 -->
|
||||
<gpgArguments>
|
||||
<arg>--pinentry-mode</arg>
|
||||
<arg>loopback</arg>
|
||||
</gpgArguments>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Central Publishing Plugin - 发布到Maven Central -->
|
||||
<plugin>
|
||||
<groupId>org.sonatype.central</groupId>
|
||||
<artifactId>central-publishing-maven-plugin</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<publishingServerId>central</publishingServerId>
|
||||
<!-- 确保所有文件都被签名 -->
|
||||
<autoPublish>true</autoPublish>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
@ -153,6 +111,47 @@
|
||||
<id>release</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- Maven GPG Plugin - 用于签名构件 -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-gpg-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>sign-artifacts</id>
|
||||
<phase>verify</phase>
|
||||
<goals>
|
||||
<goal>sign</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<!-- 使用环境变量中的gpg密钥密码 -->
|
||||
<passphrase>${env.GPG_PASSPHRASE}</passphrase>
|
||||
<!-- 指定GPG可执行文件路径 -->
|
||||
<executable>gpg</executable>
|
||||
<!-- 使用默认密钥 -->
|
||||
<useAgent>true</useAgent>
|
||||
<!-- 设置gpg主目录 -->
|
||||
<gpgArguments>
|
||||
<arg>--pinentry-mode</arg>
|
||||
<arg>loopback</arg>
|
||||
</gpgArguments>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Central Publishing Plugin - 发布到Maven Central -->
|
||||
<plugin>
|
||||
<groupId>org.sonatype.central</groupId>
|
||||
<artifactId>central-publishing-maven-plugin</artifactId>
|
||||
<version>0.9.0</version>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<publishingServerId>central</publishingServerId>
|
||||
<!-- 确保所有文件都被签名 -->
|
||||
<autoPublish>true</autoPublish>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- 在发布时激活source和javadoc插件 -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
|
||||
@ -196,7 +196,18 @@ public interface HGScannerLib extends HGDef, StdCallLibrary {
|
||||
// 使用联合体需要在JNA中特殊处理
|
||||
@Structure.FieldOrder({"option", "type", "intValue", "enumValue", "doubleValue", "boolValue", "rangeType", "unionData"})
|
||||
class HGLibDeviceParam extends Structure {
|
||||
public HGLibDeviceParam(Pointer paramPtr) {
|
||||
super(paramPtr);
|
||||
}
|
||||
|
||||
public static class ByValue extends HGLibDeviceParam implements Structure.ByValue {
|
||||
|
||||
public ByValue(Pointer paramPtr) {
|
||||
super(paramPtr);
|
||||
}
|
||||
|
||||
public ByValue() {
|
||||
}
|
||||
}
|
||||
|
||||
public int option; // 配置名, 参见HGLIB_OPTION_NAME_*
|
||||
@ -226,6 +237,10 @@ public interface HGScannerLib extends HGDef, StdCallLibrary {
|
||||
public HGLibDeviceParamGroup() {
|
||||
}
|
||||
|
||||
public HGLibDeviceParamGroup(Pointer groupPtr) {
|
||||
super(groupPtr);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String> getFieldOrder() {
|
||||
return Arrays.asList("group", "param", "paramCount");
|
||||
|
||||
@ -4,6 +4,7 @@ import com.sun.jna.Memory;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.NativeLibrary;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
@ -378,6 +379,320 @@ public class HGScannerWrapper {
|
||||
return scannerLib.HGLib_ReleaseOcrText(ocrText);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取设备参数
|
||||
*
|
||||
* @param device 设备句柄
|
||||
* @param option 配置名,参考HGLIB_OPTION_NAME_*
|
||||
* @return 设备参数结构体,失败时返回null
|
||||
*/
|
||||
public static HGScannerLib.HGLibDeviceParam getDeviceParam(HGScannerLib.HGLibDevice device, int option) {
|
||||
Pointer paramPtr = scannerLib.HGLib_GetDeviceParam(device, option);
|
||||
if (paramPtr == null || paramPtr.equals(Pointer.NULL)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
HGScannerLib.HGLibDeviceParam param = new HGScannerLib.HGLibDeviceParam.ByValue(paramPtr);
|
||||
param.read();
|
||||
scannerLib.HGLib_ReleaseDeviceParam(paramPtr);
|
||||
return param;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取设备参数值(整数类型)
|
||||
*
|
||||
* @param device 设备句柄
|
||||
* @param option 配置名,参考HGLIB_OPTION_NAME_*
|
||||
* @return 参数值,失败时返回0
|
||||
*/
|
||||
public static int getIntDeviceParam(HGScannerLib.HGLibDevice device, int option) {
|
||||
HGScannerLib.HGLibDeviceParam param = getDeviceParam(device, option);
|
||||
if (param == null || param.type != HGScannerConstants.HGLIB_OPTION_VALUETYPE_INT) {
|
||||
return 0;
|
||||
}
|
||||
return param.intValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取设备参数值(枚举类型)
|
||||
*
|
||||
* @param device 设备句柄
|
||||
* @param option 配置名,参考HGLIB_OPTION_NAME_*
|
||||
* @return 参数值,失败时返回0
|
||||
*/
|
||||
public static int getEnumDeviceParam(HGScannerLib.HGLibDevice device, int option) {
|
||||
HGScannerLib.HGLibDeviceParam param = getDeviceParam(device, option);
|
||||
if (param == null || param.type != HGScannerConstants.HGLIB_OPTION_VALUETYPE_ENUM) {
|
||||
return 0;
|
||||
}
|
||||
return param.enumValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取设备参数值(双精度类型)
|
||||
*
|
||||
* @param device 设备句柄
|
||||
* @param option 配置名,参考HGLIB_OPTION_NAME_*
|
||||
* @return 参数值,失败时返回0.0
|
||||
*/
|
||||
public static double getDoubleDeviceParam(HGScannerLib.HGLibDevice device, int option) {
|
||||
HGScannerLib.HGLibDeviceParam param = getDeviceParam(device, option);
|
||||
if (param == null || param.type != HGScannerConstants.HGLIB_OPTION_VALUETYPE_DOUBLE) {
|
||||
return 0.0;
|
||||
}
|
||||
return param.doubleValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取设备参数值(布尔类型)
|
||||
*
|
||||
* @param device 设备句柄
|
||||
* @param option 配置名,参考HGLIB_OPTION_NAME_*
|
||||
* @return 参数值,失败时返回false
|
||||
*/
|
||||
public static boolean getBoolDeviceParam(HGScannerLib.HGLibDevice device, int option) {
|
||||
HGScannerLib.HGLibDeviceParam param = getDeviceParam(device, option);
|
||||
if (param == null || param.type != HGScannerConstants.HGLIB_OPTION_VALUETYPE_BOOL) {
|
||||
return false;
|
||||
}
|
||||
return param.boolValue != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取设备参数组列表
|
||||
*
|
||||
* @param device 设备句柄
|
||||
* @return 参数组列表,失败时返回空列表
|
||||
*/
|
||||
public static List<HGScannerLib.HGLibDeviceParamGroup> getDeviceParamGroupList(HGScannerLib.HGLibDevice device) {
|
||||
IntByReference countRef = new IntByReference();
|
||||
Pointer paramGroupPtr = scannerLib.HGLib_GetDeviceParamGroupList(device, countRef);
|
||||
|
||||
if (paramGroupPtr == null || paramGroupPtr.equals(Pointer.NULL) || countRef.getValue() <= 0) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
List<HGScannerLib.HGLibDeviceParamGroup> paramGroups = new ArrayList<>();
|
||||
try {
|
||||
for (int i = 0; i < countRef.getValue(); i++) {
|
||||
Pointer groupPtr = paramGroupPtr.getPointer((long) i * Native.POINTER_SIZE);
|
||||
HGScannerLib.HGLibDeviceParamGroup paramGroup = new HGScannerLib.HGLibDeviceParamGroup(groupPtr);
|
||||
paramGroup.read();
|
||||
paramGroups.add(paramGroup);
|
||||
}
|
||||
} finally {
|
||||
scannerLib.HGLib_ReleaseDeviceParamGroupList(paramGroupPtr, countRef.getValue());
|
||||
}
|
||||
|
||||
return paramGroups;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取特定组的所有参数
|
||||
*
|
||||
* @param device 设备句柄
|
||||
* @param group 组名,参考HGLIB_GROUP_NAME_*
|
||||
* @return 参数列表,失败时返回空列表
|
||||
*/
|
||||
public static List<HGScannerLib.HGLibDeviceParam> getDeviceParamsByGroup(HGScannerLib.HGLibDevice device, int group) {
|
||||
List<HGScannerLib.HGLibDeviceParamGroup> paramGroups = getDeviceParamGroupList(device);
|
||||
List<HGScannerLib.HGLibDeviceParam> params = new ArrayList<>();
|
||||
|
||||
for (HGScannerLib.HGLibDeviceParamGroup paramGroup : paramGroups) {
|
||||
if (paramGroup.group == group) {
|
||||
if (paramGroup.param != null && !paramGroup.param.equals(Pointer.NULL)) {
|
||||
for (int i = 0; i < paramGroup.paramCount; i++) {
|
||||
Pointer paramPtr = paramGroup.param.getPointer((long) i * Native.POINTER_SIZE);
|
||||
HGScannerLib.HGLibDeviceParam param = new HGScannerLib.HGLibDeviceParam(paramPtr);
|
||||
param.read();
|
||||
scannerLib.HGLib_ReleaseDeviceParam(paramPtr);
|
||||
params.add(param);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return params;
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置设备参数为默认值
|
||||
*
|
||||
* @param device 设备句柄
|
||||
* @return 是否重置成功
|
||||
*/
|
||||
public static boolean resetDeviceParam(HGScannerLib.HGLibDevice device) {
|
||||
return scannerLib.HGLib_ResetDeviceParam(device);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取设备参数描述信息
|
||||
*
|
||||
* @param option 配置名,参考HGLIB_OPTION_NAME_*
|
||||
* @return 参数描述
|
||||
*/
|
||||
public static String getDeviceParamDescription(int option) {
|
||||
switch (option) {
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_UNKNOWN:
|
||||
return "未知";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_DLSC:
|
||||
return "多流输出";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_DLSCLX:
|
||||
return "多流输出类型";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_YSMS:
|
||||
return "颜色模式";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_HBTXYZ:
|
||||
return "黑白图像阈值";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_HDHHBTX_CS:
|
||||
return "灰度或黑白图像 - 除色";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_24WCSTX_DLSCCH:
|
||||
return "24位彩色图像 - 多流输出除红";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_24WCSTX_DTKCH:
|
||||
return "24位彩色图像 - 答题卡除红";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_BJYC:
|
||||
return "背景移除";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_BJSCFDFW:
|
||||
return "背景色彩浮动范围";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_RHYMH:
|
||||
return "锐化与模糊";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_QCMW:
|
||||
return "去除摩尔纹";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_CWW:
|
||||
return "除网纹";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_CWKS:
|
||||
return "错误扩散";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_HBTXZDYH:
|
||||
return "黑白图像噪点优化";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_ZDYHCC:
|
||||
return "噪点优化尺寸";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_ZZCC:
|
||||
return "纸张尺寸";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_ZDYSMQY:
|
||||
return "自定义扫描区域";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SMQYZCmm:
|
||||
return "扫描区域左侧(mm)";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SMQYYCmm:
|
||||
return "扫描区域右侧(mm)";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SMQYSCmm:
|
||||
return "扫描区域上侧(mm)";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SMQYXCmm:
|
||||
return "扫描区域下侧(mm)";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_CCJC:
|
||||
return "尺寸检测";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SMYM:
|
||||
return "扫描页面";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_TGKBYLMD:
|
||||
return "跳过空白页灵敏度";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_FZQD:
|
||||
return "分纸强度";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_XMSJ:
|
||||
return "休眠时间";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_FBL:
|
||||
return "分辨率";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_HZ:
|
||||
return "画质";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_JHZFM:
|
||||
return "交换正反面";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_TXCF:
|
||||
return "图像拆分";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_ZDJP:
|
||||
return "自动纠偏";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_QYSDQX:
|
||||
return "启用色调曲线";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_LDZ:
|
||||
return "亮度值";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_DBD:
|
||||
return "对比度";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_GMZ:
|
||||
return "伽马值";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_ZPMS:
|
||||
return "照片模式";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_XCHK:
|
||||
return "消除黑框";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SSYZ:
|
||||
return "深色样张";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_YZ:
|
||||
return "阈值";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_BJKZDJ:
|
||||
return "背景抗噪等级";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_BYSJ:
|
||||
return "边缘缩进";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_BJTCFS:
|
||||
return "背景填充方式";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_FZST:
|
||||
return "防止渗透";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_FZSTDJ:
|
||||
return "防止渗透等级";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_CKYCZC:
|
||||
return "穿孔移除—左侧";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_ZCCKSSFWZFMBL:
|
||||
return "左侧穿孔搜索范围占幅面比例";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_CKYCYC:
|
||||
return "穿孔移除—右侧";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_YCCKSSFWZFMBL:
|
||||
return "右侧穿孔搜索范围占幅面比例";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_CKYCSC:
|
||||
return "穿孔移除—上侧";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SCCKSSFWZFMBL:
|
||||
return "上侧穿孔搜索范围占幅面比例";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_CKYCXC:
|
||||
return "穿孔移除—下侧";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_XCCKSSFWZFMBL:
|
||||
return "下侧穿孔搜索范围占幅面比例";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SCTC:
|
||||
return "色彩填充";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_CSBJC:
|
||||
return "超声波检测";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SZTPCL:
|
||||
return "双张图片处理";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_ZDJC:
|
||||
return "装订检测";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SMZS:
|
||||
return "扫描张数";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SMSL:
|
||||
return "扫描数量";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_WGFX:
|
||||
return "文稿方向";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_BMXZ180:
|
||||
return "背面旋转180°";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_ZJJC:
|
||||
return "折角检测";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_ZJDX:
|
||||
return "折角大小";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_WXJC:
|
||||
return "歪斜检测";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_WXRRD:
|
||||
return "歪斜容忍度";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_ZDCZQD:
|
||||
return "自动分纸强度";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_CZYZ:
|
||||
return "进纸失败率";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_DZSM:
|
||||
return "待纸扫描";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_HBTXFSSC:
|
||||
return "黑白图像反色输出";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_DZSMTCSJ:
|
||||
return "待纸扫描退出时间";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_TGKBY:
|
||||
return "跳过空白页";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_JTZWJC:
|
||||
return "镜头脏污检测";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_CKYC:
|
||||
return "穿孔移除";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_CKSSFWZFMBL:
|
||||
return "穿孔搜索范围占幅面比例";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_BJJC:
|
||||
return "边界检测";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_SMCGQXHQD:
|
||||
return "扫描传感器信号强度";
|
||||
case HGScannerConstants.HGLIB_OPTION_NAME_TGKBYBYKD:
|
||||
return "跳过空白页边缘宽度";
|
||||
default:
|
||||
return "未知参数";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 内存拷贝
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user