与终端用户的扫描仪进行网络应用程序接口交互(Web/扫描仪集成)

24
考虑以下在典型的文档处理 Web 应用程序中的扫描过程:
- 用户使用连接到计算机的扫描仪扫描文档。 - 扫描的图像被保存为 BMP/JPG/TIF/PNG 文件并存储在用户计算机上。 - 用户单击 Web 应用程序中的文件上传“浏览…”按钮。 - 用户将使用文件对话框定位已扫描的图像。 - 用户点击“上传图像”,扫描的图像上传到服务器并存储。
该过程相当复杂,我想减少步骤以使该过程更加用户友好/易于操作。在理想情况下,以上步骤将被替换为只有一步,即在 Web 应用程序中点击“扫描和上传”时,自动启动文档扫描、完成文档扫描并上传生成的图像。不幸的是,“Web/扫描仪集成”的状态相当糟糕,因此这可能是乌托邦。
您如何解决这个问题?更具体地说,您将如何减少所述用例涉及的步骤数量?

这在很大程度上取决于所涉及的扫描仪,不是吗?而当前的流程为什么不好? - warren
沃伦:每个用户都有自己的扫描仪。目前的流程很糟糕,因为它涉及很多步骤,其中一些在技术上是多余的。 - knorv
DCU有一个Java小程序,旨在处理他们的“PC Deposit”家庭支票扫描系统。它似乎不支持我的扫描仪,但这可能是值得一试的东西。 - NickAldwin
11个回答

16

两年过去了,对于那些刚加入我们的人,这里是最新技术现状的更新。

DynamsoftAtalasoft都有多浏览器网络扫描工具包,与任何服务器端堆栈兼容。但使用它们需要用户安装ActiveX(在IE中)或NPAPI插件(在Chrome、Firefox等浏览器中),通过TWAIN API访问扫描仪。

显然,如果您有时间或有限的预算,可以创建自己的插件。我强烈推荐使用FireBreath插件框架以及任何TWAIN库,而不是编写自己的TWAIN代码。

一旦安装了ActiveX或插件,其余的工作就是客户端的javascript和HTML结合,以及服务器上的某种处理程序来接受和处理传入的图像,这可以使其看起来就像一个带有附加文件的多部分表单提交。

我建议使用AJAX来进行图像上传,因为它是与Web页面相同的浏览器“会话”的一部分,它继承了浏览器的代理设置、会话cookie和服务器端身份验证。关于Dynamsoft控件我还不确定,但Atalasoft工具包包括这样的AJAX上传功能。图像是以base64编码字符串的形式从插件传递给javascript,因此实际上没有创建本地文件。

声明:我在Atalasoft的WingScan网络扫描工具包上工作。


7
如果你的目标受众使用Windows和IE,并且不介意花费一些钱,Atalasoft有一些组件可以做到你想要的。

我来自Atalasoft。我们下周将在CodeProject上发布有关这个确切问题的文章 - 如果您给我发送电子邮件,我很乐意将文档发送给您:lou-dot-franco-at-atalasoft.com(替换 -dot- 和 -at-)。 - Lou Franco
为了在Windows和Mac OS X上实现跨平台支持,您也可以考虑使用Dynamic Web TWAIN。 - flysakura

1
我们为一家银行实现了远程存款的解决方案。它只在IE中运行。创建了一个winforms dll,它与LeadTools TWAIN dll进行接口交互。Leadtools TWAIN dll抽象了所有TWAIN细节。这种方法比使用ActiveX控件略好。客户端需要.NET Framework。扫描的图像被发布到页面上的隐藏变量,并在服务器上进行处理。

1

Silverlight 4即将推出。据说它可以与用户计算机上的COM对象进行交互(前提是他们正在运行Windows)。理论上,您可以从Silverlight网页中调用WIA方法。


1

我在开户时曾经看到银行工作人员这样操作,真是让我惊叹不已。当时银行使用的是Windows和IE,我猜测你们也处于同样受控的环境中。我认为银行使用了定制/可预测的扫描仪驱动程序和ActiveX控件的组合。

一个页面加载并显示"打开扫描仪",工作人员就将文件放入扫描仪中并在网页上点击扫描按钮,然后页面内容变成"正在扫描",随后它会在网页上显示出扫描后的文档,供工作人员核准。我只能猜测,扫描仪驱动程序将图像发送到某个位置,而ActiveX控件则会轮询等待其出现,一旦出现在屏幕上,就会显示图像,一旦工作人员核准后,ActiveX便会在后台上传。她打开了下一页,并继续进行剩余的流程。

天知道他们是如何使所有这些技术协同工作的,但这是可以实现的。


0

由于您的受众是受控环境,您可以编写基于WIA/TWAIN的自己的浏览器扩展程序/程序来进行扫描。如果选择浏览器扩展程序,如BHO/ActiveX/XPCOM等,则需要获得用户的许可才能安装您的扩展程序。如果选择编写程序,则可能需要Web部署技术,如ClickOnce或Java Web Start从Web启动。

在Windows上接口TWAIN很麻烦。除了复杂性之外,您还必须显示由不同扫描仪驱动程序开发人员编写的某些GUI。这可能是支持旧扫描仪或通过其他接口未公开的功能(如文档进纸器的全速多页扫描)的唯一方法。

Microsoft的WIA通过脚本对象模型使与扫描仪的接口更加容易,但是不提供特定于扫描仪的功能,并且一些旧扫描仪不支持该接口。

扫描后,您可以调用Web服务通知服务器,Web页面可以定期刷新以检查新图像。


0

我们做过类似的事情。我们使用了一个命令行TWAIN程序(http://www.burrotech.com/quickscan.php)。价格为$49。

1)我们开发了一个小型的.Net应用程序来运行QuickScan程序作为shell命令。
2)该命令被分配给扫描按钮。
3)一旦用户按下扫描按钮,将出现提示输入文件名。用户将交易ID保存为文件名。
4)另一个.Net应用程序(或者可能是之前提到的同一个应用程序)将读取此文件并将其上传到数据库中,考虑到文件名是交易ID。

就像切热牛油一样顺畅!



您可以尝试在IE中显示交易ID,让用户选择ID然后按下扫描。您的应用程序将读取所选文本并使用所选文本作为文件名保存文件。我们没有尝试过,但应该可以工作。


0
“嗯,我一直想在处理扫描文件之前先查看它,但这可能取决于您的扫描仪和所需的质量。”
“如果目标是‘自动化扫描和上传过程’而不是‘编写Web应用程序’,我会编写一个AutoIt脚本来控制现有的扫描软件和一个简单的FTP程序。”

我担心要求用户安装和使用AutoIt可能比保持当前的过程更复杂。 - knorv
AutoIt脚本编译成exe文件,因此除了将exe文件复制或下载到计算机上之外,无需安装任何其他内容。使用它可能就像单击文件(或其快捷方式)一样简单。 - Jeanne Pindar

0

最有可能减少最多步骤的选择,可能是编写一个定制的扫描实用程序,用户会下载并在他们本地机器上运行。

SANE或TWAIN将处理获取扫描图像。然后,cURL可以处理上传图像到您的Web应用程序。为了让最终用户更轻松,我会使用类似Comet连接的东西,在文件可用时更新网页。

如果那不是一个选项,您可能需要查看用户在使用其扫描仪软件时可能拥有的选项。我相信许多程序现在支持扫描到电子邮件或FTP。

对于使用多功能扫描仪/复印机的企业内部应用程序,我使用的解决方案是将扫描结果保存到Web服务器具有访问权限的SMB共享中。用户只需转到复印机,扫描到共享文件夹,当他们回到自己的办公桌时,就可以进入新的扫描页面,该页面显示所有未处理的新文件列表。


-2

如果你认为Web应用程序仅限于Web浏览器,那么这只是乌托邦。实际上,Web应用程序可以包括许多不同的技术,除了HTML和Javascript。

解决这个问题的酷方法——事实上,我已经在一些usbserial设备上使用过——是使用SOAP+XMPP实现您的应用程序。您可以通过使用XML::CompileX::Transport::SOAPXMPP、Catalyst::Engine::XMPP2、Catalyst::Controller::SOAP和Catalyst::Model::SOAP在Perl中实现它。

使用XMPP的有趣之处在于,它简化了寻址管理,因为您使用JID(Jabber ID)来查找软件代理,而不是某些主机+端口寻址模式。使用XMPP的第二个有趣部分是更容易支持服务器向客户端推送信息。

但是,如果您不想处理XMPP,仍然可以使用轻量级嵌入式HTTP服务器(例如Perl中的HTTP::Server::Simple),并以某种方式在服务器中注册当前扫描仪地址,以便它可以回调。

最后一个选项不太可爱,即软件代理轮询服务器,以查看是否有针对该特定机器的“扫描文档并上传”命令,并在存在时执行该操作。

总之,只要使用Web标准(如XML、SOAP等)来进行通信,使用本地软件代理与本地硬件交互并不会使您的Web应用程序变得不够“Web”。

1
丹尼尔,我不确定我完全理解你的建议。你的意思是说最终用户应该在他/她的本地计算机上安装Perl应用程序,并轮询Web服务器以获取扫描作业吗? - knorv
是的,我建议最终用户安装一个应用程序(这里只是举例Perl),并将其配置为以下之一:1)使用XMPP从服务器接收请求 2)保持小型http服务器打开并在服务器上注册自己以接收回调http调用。 3)保持轮询服务器,以查看是否有特定于该扫描仪的扫描订单。 - Daniel Ruoso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接