scanonweb 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -148,6 +148,7 @@ scanner.scaner_work_config = {
148
148
  - `getImageById(index)` - 获取指定索引的图像
149
149
  - `rotateImage(index, angle)` - 旋转图像
150
150
  - `deleteImageByIndex(index)` - 删除指定图像
151
+ - `moveImage(oldIndex, newIndex)` - 调整图像顺序(将 oldIndex 移动到 newIndex)
151
152
 
152
153
  #### 上传功能
153
154
  - `uploadAllImageAsPdfToUrl(url, id, desc)` - 以PDF格式上传所有图像
@@ -196,6 +197,10 @@ MIT License
196
197
 
197
198
  ## 更新日志
198
199
 
200
+ ### 1.0.3
201
+ - 添加了支持前端直接调整扫描结果图像顺序的能力,前端可以通过moveImage函数调整结果图像顺序
202
+
203
+
199
204
  ### 1.0.2
200
205
  - 添加了对加载base64格式图像的支持
201
206
  - 远程加载图像除了支持pdf和tiff格式,现在也支持加载jpg、png等常见格式的图像
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * scanonweb v1.0.2
2
+ * scanonweb v1.0.3
3
3
  * ScanOnWeb - 扫描控件 JavaScript SDK,用于与本地扫描服务程序通信
4
4
  * https://www.brainysoft.cn
5
5
  *
6
- * Copyright (c) 2025 BrainySoft
6
+ * Copyright (c) 2026 BrainySoft
7
7
  * Licensed under the MIT license
8
8
  */
9
9
  'use strict';
@@ -11,7 +11,7 @@
11
11
  /**
12
12
  * ScanOnWeb - 扫描控件 JavaScript SDK
13
13
  * https://www.brainysoft.cn 扫描控件官方网站,如需更多文档帮助请访问官网
14
- * @version 1.0.1
14
+ * @version 1.0.3
15
15
  * @author BrainySoft
16
16
  * @license MIT
17
17
  */
@@ -486,6 +486,20 @@ class ScanOnWeb {
486
486
  this.sendWebSocketCommand(cmdObj);
487
487
  }
488
488
 
489
+ /**
490
+ * 前端调整扫描结果图像顺序
491
+ * @param {number} oldIndex - 原图像索引
492
+ * @param {number} newIndex - 目标图像索引
493
+ */
494
+ moveImage(oldIndex, newIndex) {
495
+ const cmdObj = {
496
+ cmd_type: "moveImage",
497
+ oldIndex: oldIndex,
498
+ newIndex: newIndex
499
+ };
500
+ this.sendWebSocketCommand(cmdObj);
501
+ }
502
+
489
503
  /**
490
504
  * 以pdf格式上传全部图像到服务器端
491
505
  * @param {string} url - 上传URL
@@ -1,15 +1,15 @@
1
1
  /*!
2
- * scanonweb v1.0.2
2
+ * scanonweb v1.0.3
3
3
  * ScanOnWeb - 扫描控件 JavaScript SDK,用于与本地扫描服务程序通信
4
4
  * https://www.brainysoft.cn
5
5
  *
6
- * Copyright (c) 2025 BrainySoft
6
+ * Copyright (c) 2026 BrainySoft
7
7
  * Licensed under the MIT license
8
8
  */
9
9
  /**
10
10
  * ScanOnWeb - 扫描控件 JavaScript SDK
11
11
  * https://www.brainysoft.cn 扫描控件官方网站,如需更多文档帮助请访问官网
12
- * @version 1.0.1
12
+ * @version 1.0.3
13
13
  * @author BrainySoft
14
14
  * @license MIT
15
15
  */
@@ -484,6 +484,20 @@ class ScanOnWeb {
484
484
  this.sendWebSocketCommand(cmdObj);
485
485
  }
486
486
 
487
+ /**
488
+ * 前端调整扫描结果图像顺序
489
+ * @param {number} oldIndex - 原图像索引
490
+ * @param {number} newIndex - 目标图像索引
491
+ */
492
+ moveImage(oldIndex, newIndex) {
493
+ const cmdObj = {
494
+ cmd_type: "moveImage",
495
+ oldIndex: oldIndex,
496
+ newIndex: newIndex
497
+ };
498
+ this.sendWebSocketCommand(cmdObj);
499
+ }
500
+
487
501
  /**
488
502
  * 以pdf格式上传全部图像到服务器端
489
503
  * @param {string} url - 上传URL
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * scanonweb v1.0.2
2
+ * scanonweb v1.0.3
3
3
  * ScanOnWeb - 扫描控件 JavaScript SDK,用于与本地扫描服务程序通信
4
4
  * https://www.brainysoft.cn
5
5
  *
6
- * Copyright (c) 2025 BrainySoft
6
+ * Copyright (c) 2026 BrainySoft
7
7
  * Licensed under the MIT license
8
8
  */
9
9
  (function (global, factory) {
@@ -15,7 +15,7 @@
15
15
  /**
16
16
  * ScanOnWeb - 扫描控件 JavaScript SDK
17
17
  * https://www.brainysoft.cn 扫描控件官方网站,如需更多文档帮助请访问官网
18
- * @version 1.0.1
18
+ * @version 1.0.3
19
19
  * @author BrainySoft
20
20
  * @license MIT
21
21
  */
@@ -490,6 +490,20 @@
490
490
  this.sendWebSocketCommand(cmdObj);
491
491
  }
492
492
 
493
+ /**
494
+ * 前端调整扫描结果图像顺序
495
+ * @param {number} oldIndex - 原图像索引
496
+ * @param {number} newIndex - 目标图像索引
497
+ */
498
+ moveImage(oldIndex, newIndex) {
499
+ const cmdObj = {
500
+ cmd_type: "moveImage",
501
+ oldIndex: oldIndex,
502
+ newIndex: newIndex
503
+ };
504
+ this.sendWebSocketCommand(cmdObj);
505
+ }
506
+
493
507
  /**
494
508
  * 以pdf格式上传全部图像到服务器端
495
509
  * @param {string} url - 上传URL
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * scanonweb v1.0.2
2
+ * scanonweb v1.0.3
3
3
  * ScanOnWeb - 扫描控件 JavaScript SDK,用于与本地扫描服务程序通信
4
4
  * https://www.brainysoft.cn
5
5
  *
6
- * Copyright (c) 2025 BrainySoft
6
+ * Copyright (c) 2026 BrainySoft
7
7
  * Licensed under the MIT license
8
8
  */
9
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).ScanOnWeb=t()}(this,(function(){"use strict";class e{constructor(){this.scaner_work_config={showUI:!1,dpi_x:300,dpi_y:300,deviceIndex:0,showDialog:!1,autoFeedEnable:!0,autoFeed:!1,dupxMode:!1,autoDeskew:!1,autoBorderDetection:!1,colorMode:"RGB",transMode:"memory"},this.h5socket=null,this.imageCount=0,this.tryConnect()}getConnectedServer(e){return console.log("尝试连接托盘扫描服务websocket服务器..."),new Promise(((t,o)=>{const a=new WebSocket(e[0]);a.onopen=()=>{t(a)},a.onerror=e=>{o(e)}})).then((e=>(console.log("连接websocket服务器成功!"),this.initWebsocketCallback(e),console.log("尝试获取扫描设备列表..."),this.loadDevices(),e)),(t=>{if(e.length>1)return this.getConnectedServer(e.slice(1));throw t}))}tryConnect(){this.getConnectedServer(["ws://127.0.0.1:1001","ws://127.0.0.1:2001","ws://127.0.0.1:3001","ws://127.0.0.1:4001","ws://127.0.0.1:5001"])}initWebsocketCallback(e){this.h5socket=e,this.h5socket.onerror=this.onSocketError.bind(this),this.h5socket.onmessage=this.onSocketMessage.bind(this)}onSocketError(e){alert("无法连接扫描服务程序,请检查扫描服务程序是否已经启动!"),console.log("WebSocket error: "+e.data)}isCallbackExist(e){return!(!e||void 0===e||void 0===e)&&"function"==typeof e}onSocketMessage(e){const t=JSON.parse(e.data);switch(t.cmd_type){case"getDevicesList":this.isCallbackExist(this.onGetDevicesListEvent)&&this.onGetDevicesListEvent(t);break;case"scanComplete":this.imageCount=t.imageCount,this.isCallbackExist(this.onScanFinishedEvent)&&this.onScanFinishedEvent(t);break;case"selectScanDevice":this.scaner_work_config.deviceIndex=t.currentIndex,this.scaner_work_config.showDialog=t.showDialog,this.scaner_work_config.autoFeedEnable=t.autoFeedEnable,this.scaner_work_config.autoFeed=t.autoFeed,this.scaner_work_config.dupxMode=t.dupxMode,this.scaner_work_config.autoDeskew=t.autoDeskew,this.scaner_work_config.autoBorderDetection=t.autoBorderDetection,this.isCallbackExist(this.onSelectScanDeviceEvent)&&this.onSelectScanDeviceEvent(t);break;case"getImageCount":this.imageCount=t.imageCount,this.isCallbackExist(this.onGetImageCountEvent)&&this.onGetImageCountEvent(t);break;case"getAllImage":this.imageCount=t.imageCount,this.isCallbackExist(this.onGetAllImageEvent)&&this.onGetAllImageEvent(t);break;case"getImageById":this.imageCount=t.imageCount,this.isCallbackExist(this.onGetImageByIdEvent)&&this.onGetImageByIdEvent(t);break;case"loadImageFromUrl":this.imageCount=t.imageCount,this.isCallbackExist(this.onLoadImageFromUrlEvent)&&this.onLoadImageFromUrlEvent(t);break;case"loadImageFromBase64":this.imageCount=t.imageCount,this.isCallbackExist(this.onLoadImageFromBase64Event)&&this.onLoadImageFromBase64Event(t);break;case"rotateImage":this.imageCount=t.imageCount,this.isCallbackExist(this.onRotateImageEvent)&&this.onRotateImageEvent(t);break;case"getImageSize":this.imageCount=t.imageCount,this.isCallbackExist(this.onGetImageSizeEvent)&&this.onGetImageSizeEvent(t);break;case"uploadAllImageAsPdfToUrl":this.isCallbackExist(this.onUploadAllImageAsPdfToUrlEvent)&&this.onUploadAllImageAsPdfToUrlEvent(t);break;case"uploadAllImageAsTiffToUrl":this.isCallbackExist(this.onUploadAllImageAsTiffToUrlEvent)&&this.onUploadAllImageAsTiffToUrlEvent(t);break;case"uploadJpgImageByIndex":this.isCallbackExist(this.onUploadJpgImageByIndexEvent)&&this.onUploadJpgImageByIndexEvent(t);break;case"upload":this.imageCount=t.imageCount,this.isCallbackExist(this.onUploadEvent)&&this.onUploadEvent(t);break;case"imageEdited":this.isCallbackExist(this.onImageEditedEvent)&&this.onImageEditedEvent(t);break;case"imageDrap":this.isCallbackExist(this.onImageDrapEvent)&&this.onImageDrapEvent(t)}}sendWebSocketCommand(e){try{1===this.h5socket.readyState?this.h5socket.send(JSON.stringify(e)):alert("发送扫描指令失败!请刷新页面或者检查托盘扫描程序是否已经正常运行!")}catch(e){alert("发送扫描指令失败!"+e)}}setLicenseKey(e,t,o,a){const s={cmd_type:"setLicenseKey",licenseMode:e,key1:t,key2:o,url:a};this.sendWebSocketCommand(s)}loadDevices(){this.sendWebSocketCommand({cmd_type:"getDevicesList"})}selectScanDevice(e){const t={cmd_type:"selectScanDevice",deviceIndex:e};this.sendWebSocketCommand(t)}startScan(){const e={cmd_type:"startScan",config:this.scaner_work_config};this.sendWebSocketCommand(e)}clearAll(){this.sendWebSocketCommand({cmd_type:"clearAll"})}getImageCount(){this.sendWebSocketCommand({cmd_type:"getImageCount"})}getAllImage(){this.sendWebSocketCommand({cmd_type:"getAllImage"})}getImageById(e){const t={cmd_type:"getImageById",index:e};this.sendWebSocketCommand(t)}loadImageFromUrl(e,t){if(!t){const o=e.split(".").pop().toLowerCase();t="pdf"===o?"pdf":"tiff"===o||"tif"===o?"tiff":(["jpg","jpeg","png","bmp","gif","webp"].includes(o),"image")}const o={cmd_type:"loadImageFromUrl",url:e,type:t};this.sendWebSocketCommand(o)}loadImageFromBase64(e,t="jpg"){if(e.startsWith("data:")){const o=e.indexOf("base64,");if(-1!==o){const a=e.match(/data:image\/(\w+);/);a&&a[1]&&!t&&(t="jpeg"===a[1]?"jpg":a[1]),e=e.substring(o+7)}}const o={cmd_type:"loadImageFromBase64",base64Data:e,format:t};this.sendWebSocketCommand(o)}rotateImage(e,t){const o={cmd_type:"rotateImage",index:e,angle:t};this.sendWebSocketCommand(o)}getImageSize(e){const t={cmd_type:"getImageSize",index:e};this.sendWebSocketCommand(t)}deleteImageByIndex(e){const t={cmd_type:"deleteImageByIndex",index:e};this.sendWebSocketCommand(t)}uploadAllImageAsPdfToUrl(e,t,o){const a={cmd_type:"uploadAllImageAsPdfToUrl",url:e,id:t,desc:o};this.sendWebSocketCommand(a)}uploadAllImageAsTiffToUrl(e,t,o){const a={cmd_type:"uploadAllImageAsTiffToUrl",url:e,id:t,desc:o};this.sendWebSocketCommand(a)}uploadJpgImageByIndex(e,t,o,a){const s={cmd_type:"uploadJpgImageByIndex",index:a,url:e,id:t,desc:o};this.sendWebSocketCommand(s)}saveAllImageToLocal(e){const t={cmd_type:"saveAllImageToLocal",filename:e};this.sendWebSocketCommand(t)}openClientLocalfile(){this.sendWebSocketCommand({cmd_type:"openClientLocalfile"})}ftpUploadAllImage(e,t,o,a,s,n){const i={cmd_type:"ftpUploadAllImage",serverIp:e,port:t,username:o,password:a,serverPath:s,filename:n};this.sendWebSocketCommand(i)}setUploadButtonVisible(e){const t={cmd_type:"setUploadButtonVisible",visible:e};this.sendWebSocketCommand(t)}setFocus(){this.sendWebSocketCommand({cmd_type:"focus"})}hidden(){this.sendWebSocketCommand({cmd_type:"hidden"})}closeWebSocket(){this.h5socket.close()}loadMultipleImagesFromBase64(e){Array.isArray(e)&&0!==e.length?e.forEach(((e,t)=>{setTimeout((()=>{this.loadImageFromBase64(e.data,e.format||"jpg")}),100*t)})):console.error("loadMultipleImagesFromBase64: 参数必须是非空数组")}loadImageFromCanvas(e,t="jpg",o=.9){if(!(e&&e instanceof HTMLCanvasElement))return void console.error("loadImageFromCanvas: 参数必须是有效的Canvas元素");const a="jpg"===t?"image/jpeg":`image/${t}`,s=e.toDataURL(a,o).split(",")[1];this.loadImageFromBase64(s,t)}loadImageFromFileInput(e){if(!e||!e.files||0===e.files.length)return void console.error("loadImageFromFileInput: 没有选择文件");Array.from(e.files).forEach(((e,t)=>{if(!e.type.startsWith("image/"))return void console.warn(`跳过非图像文件: ${e.name}`);const o=new FileReader;o.onload=o=>{const a=o.target.result,s=e.name.split(".").pop().toLowerCase(),n="jpeg"===s?"jpg":s;setTimeout((()=>{this.loadImageFromBase64(a,n)}),100*t)},o.readAsDataURL(e)}))}}return"undefined"!=typeof module&&module.exports&&(module.exports=e),"undefined"!=typeof window&&(window.ScanOnWeb=e),e}));
9
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).ScanOnWeb=t()}(this,(function(){"use strict";class e{constructor(){this.scaner_work_config={showUI:!1,dpi_x:300,dpi_y:300,deviceIndex:0,showDialog:!1,autoFeedEnable:!0,autoFeed:!1,dupxMode:!1,autoDeskew:!1,autoBorderDetection:!1,colorMode:"RGB",transMode:"memory"},this.h5socket=null,this.imageCount=0,this.tryConnect()}getConnectedServer(e){return console.log("尝试连接托盘扫描服务websocket服务器..."),new Promise(((t,o)=>{const a=new WebSocket(e[0]);a.onopen=()=>{t(a)},a.onerror=e=>{o(e)}})).then((e=>(console.log("连接websocket服务器成功!"),this.initWebsocketCallback(e),console.log("尝试获取扫描设备列表..."),this.loadDevices(),e)),(t=>{if(e.length>1)return this.getConnectedServer(e.slice(1));throw t}))}tryConnect(){this.getConnectedServer(["ws://127.0.0.1:1001","ws://127.0.0.1:2001","ws://127.0.0.1:3001","ws://127.0.0.1:4001","ws://127.0.0.1:5001"])}initWebsocketCallback(e){this.h5socket=e,this.h5socket.onerror=this.onSocketError.bind(this),this.h5socket.onmessage=this.onSocketMessage.bind(this)}onSocketError(e){alert("无法连接扫描服务程序,请检查扫描服务程序是否已经启动!"),console.log("WebSocket error: "+e.data)}isCallbackExist(e){return!(!e||void 0===e||void 0===e)&&"function"==typeof e}onSocketMessage(e){const t=JSON.parse(e.data);switch(t.cmd_type){case"getDevicesList":this.isCallbackExist(this.onGetDevicesListEvent)&&this.onGetDevicesListEvent(t);break;case"scanComplete":this.imageCount=t.imageCount,this.isCallbackExist(this.onScanFinishedEvent)&&this.onScanFinishedEvent(t);break;case"selectScanDevice":this.scaner_work_config.deviceIndex=t.currentIndex,this.scaner_work_config.showDialog=t.showDialog,this.scaner_work_config.autoFeedEnable=t.autoFeedEnable,this.scaner_work_config.autoFeed=t.autoFeed,this.scaner_work_config.dupxMode=t.dupxMode,this.scaner_work_config.autoDeskew=t.autoDeskew,this.scaner_work_config.autoBorderDetection=t.autoBorderDetection,this.isCallbackExist(this.onSelectScanDeviceEvent)&&this.onSelectScanDeviceEvent(t);break;case"getImageCount":this.imageCount=t.imageCount,this.isCallbackExist(this.onGetImageCountEvent)&&this.onGetImageCountEvent(t);break;case"getAllImage":this.imageCount=t.imageCount,this.isCallbackExist(this.onGetAllImageEvent)&&this.onGetAllImageEvent(t);break;case"getImageById":this.imageCount=t.imageCount,this.isCallbackExist(this.onGetImageByIdEvent)&&this.onGetImageByIdEvent(t);break;case"loadImageFromUrl":this.imageCount=t.imageCount,this.isCallbackExist(this.onLoadImageFromUrlEvent)&&this.onLoadImageFromUrlEvent(t);break;case"loadImageFromBase64":this.imageCount=t.imageCount,this.isCallbackExist(this.onLoadImageFromBase64Event)&&this.onLoadImageFromBase64Event(t);break;case"rotateImage":this.imageCount=t.imageCount,this.isCallbackExist(this.onRotateImageEvent)&&this.onRotateImageEvent(t);break;case"getImageSize":this.imageCount=t.imageCount,this.isCallbackExist(this.onGetImageSizeEvent)&&this.onGetImageSizeEvent(t);break;case"uploadAllImageAsPdfToUrl":this.isCallbackExist(this.onUploadAllImageAsPdfToUrlEvent)&&this.onUploadAllImageAsPdfToUrlEvent(t);break;case"uploadAllImageAsTiffToUrl":this.isCallbackExist(this.onUploadAllImageAsTiffToUrlEvent)&&this.onUploadAllImageAsTiffToUrlEvent(t);break;case"uploadJpgImageByIndex":this.isCallbackExist(this.onUploadJpgImageByIndexEvent)&&this.onUploadJpgImageByIndexEvent(t);break;case"upload":this.imageCount=t.imageCount,this.isCallbackExist(this.onUploadEvent)&&this.onUploadEvent(t);break;case"imageEdited":this.isCallbackExist(this.onImageEditedEvent)&&this.onImageEditedEvent(t);break;case"imageDrap":this.isCallbackExist(this.onImageDrapEvent)&&this.onImageDrapEvent(t)}}sendWebSocketCommand(e){try{1===this.h5socket.readyState?this.h5socket.send(JSON.stringify(e)):alert("发送扫描指令失败!请刷新页面或者检查托盘扫描程序是否已经正常运行!")}catch(e){alert("发送扫描指令失败!"+e)}}setLicenseKey(e,t,o,a){const s={cmd_type:"setLicenseKey",licenseMode:e,key1:t,key2:o,url:a};this.sendWebSocketCommand(s)}loadDevices(){this.sendWebSocketCommand({cmd_type:"getDevicesList"})}selectScanDevice(e){const t={cmd_type:"selectScanDevice",deviceIndex:e};this.sendWebSocketCommand(t)}startScan(){const e={cmd_type:"startScan",config:this.scaner_work_config};this.sendWebSocketCommand(e)}clearAll(){this.sendWebSocketCommand({cmd_type:"clearAll"})}getImageCount(){this.sendWebSocketCommand({cmd_type:"getImageCount"})}getAllImage(){this.sendWebSocketCommand({cmd_type:"getAllImage"})}getImageById(e){const t={cmd_type:"getImageById",index:e};this.sendWebSocketCommand(t)}loadImageFromUrl(e,t){if(!t){const o=e.split(".").pop().toLowerCase();t="pdf"===o?"pdf":"tiff"===o||"tif"===o?"tiff":(["jpg","jpeg","png","bmp","gif","webp"].includes(o),"image")}const o={cmd_type:"loadImageFromUrl",url:e,type:t};this.sendWebSocketCommand(o)}loadImageFromBase64(e,t="jpg"){if(e.startsWith("data:")){const o=e.indexOf("base64,");if(-1!==o){const a=e.match(/data:image\/(\w+);/);a&&a[1]&&!t&&(t="jpeg"===a[1]?"jpg":a[1]),e=e.substring(o+7)}}const o={cmd_type:"loadImageFromBase64",base64Data:e,format:t};this.sendWebSocketCommand(o)}rotateImage(e,t){const o={cmd_type:"rotateImage",index:e,angle:t};this.sendWebSocketCommand(o)}getImageSize(e){const t={cmd_type:"getImageSize",index:e};this.sendWebSocketCommand(t)}deleteImageByIndex(e){const t={cmd_type:"deleteImageByIndex",index:e};this.sendWebSocketCommand(t)}moveImage(e,t){const o={cmd_type:"moveImage",oldIndex:e,newIndex:t};this.sendWebSocketCommand(o)}uploadAllImageAsPdfToUrl(e,t,o){const a={cmd_type:"uploadAllImageAsPdfToUrl",url:e,id:t,desc:o};this.sendWebSocketCommand(a)}uploadAllImageAsTiffToUrl(e,t,o){const a={cmd_type:"uploadAllImageAsTiffToUrl",url:e,id:t,desc:o};this.sendWebSocketCommand(a)}uploadJpgImageByIndex(e,t,o,a){const s={cmd_type:"uploadJpgImageByIndex",index:a,url:e,id:t,desc:o};this.sendWebSocketCommand(s)}saveAllImageToLocal(e){const t={cmd_type:"saveAllImageToLocal",filename:e};this.sendWebSocketCommand(t)}openClientLocalfile(){this.sendWebSocketCommand({cmd_type:"openClientLocalfile"})}ftpUploadAllImage(e,t,o,a,s,n){const i={cmd_type:"ftpUploadAllImage",serverIp:e,port:t,username:o,password:a,serverPath:s,filename:n};this.sendWebSocketCommand(i)}setUploadButtonVisible(e){const t={cmd_type:"setUploadButtonVisible",visible:e};this.sendWebSocketCommand(t)}setFocus(){this.sendWebSocketCommand({cmd_type:"focus"})}hidden(){this.sendWebSocketCommand({cmd_type:"hidden"})}closeWebSocket(){this.h5socket.close()}loadMultipleImagesFromBase64(e){Array.isArray(e)&&0!==e.length?e.forEach(((e,t)=>{setTimeout((()=>{this.loadImageFromBase64(e.data,e.format||"jpg")}),100*t)})):console.error("loadMultipleImagesFromBase64: 参数必须是非空数组")}loadImageFromCanvas(e,t="jpg",o=.9){if(!(e&&e instanceof HTMLCanvasElement))return void console.error("loadImageFromCanvas: 参数必须是有效的Canvas元素");const a="jpg"===t?"image/jpeg":`image/${t}`,s=e.toDataURL(a,o).split(",")[1];this.loadImageFromBase64(s,t)}loadImageFromFileInput(e){if(!e||!e.files||0===e.files.length)return void console.error("loadImageFromFileInput: 没有选择文件");Array.from(e.files).forEach(((e,t)=>{if(!e.type.startsWith("image/"))return void console.warn(`跳过非图像文件: ${e.name}`);const o=new FileReader;o.onload=o=>{const a=o.target.result,s=e.name.split(".").pop().toLowerCase(),n="jpeg"===s?"jpg":s;setTimeout((()=>{this.loadImageFromBase64(a,n)}),100*t)},o.readAsDataURL(e)}))}}return"undefined"!=typeof module&&module.exports&&(module.exports=e),"undefined"!=typeof window&&(window.ScanOnWeb=e),e}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scanonweb",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "ScanOnWeb - 扫描控件 JavaScript SDK,用于与本地扫描服务程序通信",
5
5
  "main": "dist/scanonweb.cjs.js",
6
6
  "module": "dist/scanonweb.esm.js",
package/src/index.d.ts CHANGED
@@ -196,6 +196,13 @@ export default class ScanOnWeb {
196
196
  */
197
197
  deleteImageByIndex(index: number): void;
198
198
 
199
+ /**
200
+ * 前端调整扫描结果图像顺序
201
+ * @param oldIndex 原图像索引
202
+ * @param newIndex 目标图像索引
203
+ */
204
+ moveImage(oldIndex: number, newIndex: number): void;
205
+
199
206
  /**
200
207
  * 以pdf格式上传全部图像到服务器端
201
208
  * @param url 上传URL
package/src/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * ScanOnWeb - 扫描控件 JavaScript SDK
3
3
  * https://www.brainysoft.cn 扫描控件官方网站,如需更多文档帮助请访问官网
4
- * @version 1.0.1
4
+ * @version 1.0.3
5
5
  * @author BrainySoft
6
6
  * @license MIT
7
7
  */
@@ -463,6 +463,20 @@ class ScanOnWeb {
463
463
  this.sendWebSocketCommand(cmdObj);
464
464
  }
465
465
 
466
+ /**
467
+ * 前端调整扫描结果图像顺序
468
+ * @param {number} oldIndex - 原图像索引
469
+ * @param {number} newIndex - 目标图像索引
470
+ */
471
+ moveImage(oldIndex, newIndex) {
472
+ const cmdObj = {
473
+ cmd_type: "moveImage",
474
+ oldIndex: oldIndex,
475
+ newIndex: newIndex,
476
+ };
477
+ this.sendWebSocketCommand(cmdObj);
478
+ }
479
+
466
480
  /**
467
481
  * 以pdf格式上传全部图像到服务器端
468
482
  * @param {string} url - 上传URL