Node.js+Web TWAIN,实现Web文档扫描和图像上传

通过Dynamic Web TWAIN SDKNode.js的组合,只需要几行代码就可以实现在浏览器中控制扫描仪,获取图像后上传到远程服务器。


原文:Document Imaging and Uploading With Dynamic Web TWAIN and Node.js

下载安装

通过Node.js创建server

创建工程目录,打开cmd.exe进入到工程目录,安装下面两个Node.js模块:

?
1
2
npm install formidable@latest
npm install express

创建server.js,初始化:

?
1
2
3
4
5
var  formidable = require( 'formidable' );
var  util = require( 'util' );
var  express = require( 'express' );
var  fs = require( 'fs' );
var  app = express();

把静态资源,比如图片,css等,都加载进来:

?
1
app.use(express. static (__dirname,  '/public' ));

要实现跨域访问,需要在header里添加权限,如果不添加,只能local访问:

?
1
2
3
4
5
6
7
app.use( function (req, res, next) {  
     res.header( "Access-Control-Allow-Origin" "*" );   
     res.header( "Access-Control-Allow-Methods" , "PUT, POST, GET, DELETE, OPTIONS" );  
     res.header( "Access-Control-Allow-Headers" , "X-Requested-With, content-type" );  
     res.header( "Access-Control-Allow-Credentials" true );  
     next();  
});

在POST请求中通过formidable解析数据:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
app.post( '/upload' function (req, res) {
     var  form =  new  formidable.IncomingForm();
     form.parse(req,  function (err, fields, files) {
         // console.log(util.inspect({
         //     fields: fields,
         //     files: files
         // }));
  
         fs.readFile(files.RemoteFile.path,  function (err, data) {
             // save file from temp dir to new dir
             var  newPath = __dirname +  "/uploads/"  + files.RemoteFile.name;
             fs.writeFile(newPath, data,  function (err) {
                 if  (err)  throw  err;
                 console.log( 'file saved' );  
                 res.end();
             });
         });
     });
})

设置好IP和端口:

?
1
2
3
4
5
var  server = app.listen(2014,  function () {
     var  host = server.address().address;
     var  port = server.address().port;
     console.log( 'listening at http://%s:%s' , host, port);
})

通过Dynamic Web TWAIN创建client

创建一个网页,包含一个div和两个button:

?
1
2
3
4
5
6
7
8
9
10
11
12
< html >
     < head >
         < title >Document Imaging & Uploading</ title >
         < script  src = "/Resources/dynamsoft.webtwain.initiate.js" ></ script >
         < script  src = "/Resources/dynamsoft.webtwain.config.js" ></ script >
     </ head >
     < body >
         < div  id = "dwtcontrolContainer" ></ div >
         < input  type = "button"  value = "Acquire"  onclick = "AcquireImage();"  />
         < input  id = "btnUpload"  type = "button"  value = "Upload Image"  onclick = "btnUpload_onclick()" >
     </ body >
</ html >

这里需要把Web TWAIN SDK安装目录下的Resources目录拷贝过来。

加几行代码就可以扫描了:

?
1
2
3
4
5
6
function  AcquireImage(){
      DWObject.IfShowUI =  false ;
      DWObject.SelectSource();
      DWObject.OpenSource();
      DWObject.AcquireImage();
}

到这里可以先测试下扫描能否正常工作。接下来实现远程上传:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function  btnUpload_onclick() {
        DWObject.HTTPPort = 2014;
        var  CurrentPathName = unescape(location.pathname);  // get current PathName in plain ASCII
        var  CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf( "/" ) + 1);
        var  strActionPage = CurrentPath +  "upload" ;
        var  strHostIP =  "localhost" // modify the IP for cross-domain access
        var  sFun =  function (){
            alert( 'successful' );
        }, fFun =  function (){
            alert( 'failed' );
        };
        DWObject.HTTPUploadThroughPostEx(
        strHostIP,
        DWObject.CurrentImageIndexInBuffer,
        strActionPage,
        "test.jpg" ,
        1, // JPEG
        sFun, fFun
        );
}

测试下。命令行启动server:

?
1
node server.js

打开http://localhost:2014就可以玩了。

源码

https://github.com/DynamsoftRD/nodejs-dwt

?
1
git clone https://github.com/DynamsoftRD/nodejs-dwt.git

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答您的问题。 首先,需要确保已经安装了Dynamic Web TWAIN Java插件。接着,按照以下步骤建立一个“Hello World”扫描页面: 1. 在您的Web应用程序中创建一个新的JSP文件(例如:scan.jsp)。 2. 在JSP文件中添加以下代码: ```html <!DOCTYPE html> <html> <head> <title>Hello World Scan Page</title> </head> <body> <h1>Hello World Scan Page</h1> <object id="dwtcontrolContainer"></object> <script type="text/javascript" src="../Resources/dynamsoft.webtwain.initiate.js"></script> <script type="text/javascript"> Dynamsoft.WebTwainEnv.AutoLoad = false; Dynamsoft.WebTwainEnv.Containers = [{ContainerId: 'dwtcontrolContainer', Width: 270, Height: 350}]; Dynamsoft.WebTwainEnv.ProductKey = 'LICENSE-KEY-GOES-HERE'; Dynamsoft.WebTwainEnv.ResourcesPath = '../Resources'; Dynamsoft.WebTwainEnv.Load(); </script> </body> </html> ``` 请注意将 `LICENSE-KEY-GOES-HERE` 替换为您的Dynamic Web TWAIN许可证密钥。 3. 在您的Web应用程序中创建一个名为“Resources”的文件夹,并将以下文件从Dynamic Web TWAIN Java安装文件夹中复制到该文件夹中: - dwt_trial_license.js - dynamsoft.webtwain.initiate.js - dynamsoft.webtwain.config.js - dynamsoft.webtwain.install.js - dynamsoft.webtwain.plugin.js - dynamsoft.webtwain.scan.js - dynamsoft.webtwain.env.js - dwtstyle.css - dwticon.gif 4. 将您的Web应用程序部署到Web服务器上,并在浏览器中访问scan.jsp页面。您应该会看到一个“Hello World”标题和一个空白的扫描仪控件。 5. 点击扫描仪控件中的“扫描”按钮,您应该会看到一个弹出窗口,询问您扫描的设置。 6. 配置您的扫描设置后,单击“扫描”按钮。如果一切正常,您应该可以看到扫描图像显示在扫描仪控件中。 这只是一个简单的“Hello World”示例,Dynamic Web TWAIN Java插件提供了更多高级功能,例如自动文本识别,自动文档分割和多页扫描等。希望这可以帮助您开始使用Dynamic Web TWAIN Java插件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值