【问题标题】:Interfacing with the end-user's scanner from a webapp (web/scanner integration)从 web 应用程序与最终用户的扫描仪交互(网络/扫描仪集成)
【发布时间】:2010-12-08 18:26:53
【问题描述】:

在典型的文档处理 web 应用中考虑以下扫描过程:

  • 用户使用连接到他/她的计算机的扫描仪扫描文档
  • 扫描的图像作为 BMP/JPG/TIF/PNG 文件本地保存在用户的计算机上
  • 用户在 Web 应用程序中点击文件上传“浏览..”按钮
  • 用户会看到一个文件对话框,他/她用它来定位扫描的图像
  • 用户点击“上传图片”,扫描后的图片会上传到存储的服务器

这个过程非常复杂,我想减少步骤数,以使该过程更加用户友好/防呆。在理想情况下,上述步骤将被替换为只有一个步骤,即程序启动文档扫描、完成文档扫描并上传当点击“扫描并上传”时,Web 应用程序会自动触发生成的图像。不幸的是,“网络/扫描仪集成”的状态似乎很差,所以这可能是乌托邦。

您将如何解决这个问题?更具体地说,您将如何减少所描述的用例中涉及的步骤数?

【问题讨论】:

  • 这在很大程度上取决于有问题的扫描仪,不是吗?为什么当前流程不好?
  • warren:每个用户都有自己的扫描仪。目前的流程很糟糕,因为它涉及很多步骤,其中一些在技术上是多余的。
  • DCU 有一个 Java 小程序,旨在为他们的“PC Deposit”家庭支票扫描系统处理这个问题。它似乎不支持我的扫描仪,但可能需要检查一下。

标签: language-agnostic twain image-scanner


【解决方案1】:

嗯,两年过去了,所以这里是最新的最新消息,适合刚加入我们的人。

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

显然,如果您有时间或预算有限,您可以创建自己的插件。我衷心推荐 FireBreath plugin frameworkany TWAIN 库,而不是编写自己的 TWAIN 代码。

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

我建议使用 AJAX 在 javascript 中上传图片,因为它是与网页相同的浏览器“会话”的一部分,并且它继承了浏览器的代理设置、会话 cookie 和服务器端身份验证。我不知道Dynamsoft的控件,Atalasoft工具包中包含这样的AJAX上传。图像作为 base64 编码字符串从插件传递到 javascript,因此实际上没有创建本地文件。

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

【讨论】:

    【解决方案2】:

    如果您的目标受众正在运行 Windows 和 IE,并且您不介意花几美元,Atalasoft 有一些组件可以满足您的需求。

    【讨论】:

    • 我来自 Atalasoft。我们将在下周发布一个关于这个确切问题的 CodeProject——如果您给我发电子邮件,我们很乐意将文档发送给您:lou -dot-franco-at-atalasoft.com(替换 -dot- 和 -at-)。
    • 对于 Windows 和 Mac OS X 的跨平台支持,您还可以考虑 Dynamic Web TWAIN。
    【解决方案3】:

    我实际上在设置我的帐户时看到银行有人这样做,我非常惊讶。有问题的银行使用的是 Windows 和 IE,我假设您处于同样受控的环境中。我认为银行使用了自定义/可预测的扫描仪驱动程序和 ActiveX 控件的组合。

    加载的页面显示“打开扫描仪”,工作人员弹出文档并在网页上点击扫描,然后页面更改为扫描,然后它在网页上显示扫描的文档供工作人员查看批准。我只能假设扫描仪驱动程序将图像发送到某个位置,并且活动 X 控件正在轮询它是否出现,一旦它出现,它就会在屏幕上显示图像,一旦工作人员批准它,活动 X 就会将它上传到背景。她打开下一页并继续进行其余的过程。

    上帝知道他们是如何让所有这些技术发挥作用的,但这是可以做到的。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我们实施了一个解决方案来为一家银行实施远程存款。它仅适用于 IE。创建了一个与 LeadTools TWAIN dll 接口的winforms dll。 Leadtools TWAIN dll 提取所有 TWAIN 细节。这种方法比使用 ActiveX 控件要好一些。客户端需要 .NET Framework。扫描的图像会被回传到页面上的隐藏变量中,并在服务器上进行处理。

        【讨论】:

          【解决方案6】:

          嗯,我一直想在对扫描文件进行任何操作之前先查看它,但我想这取决于您的扫描仪以及您需要多少质量。

          如果目标是“自动化扫描和上传过程”而不是“编写网络应用程序”,我会编写一个 AutoIt 脚本来控制现有的扫描仪软件和一个简单的 ftp 程序。

          【讨论】:

          • 恐怕要求用户安装和使用 AutoIt 可能比保留当前程序更复杂。
          • AutoIt 脚本会编译成 exe,因此除了将 exe 复制或下载到他们的计算机上外,无需安装任何东西。使用它就像点击文件(或它的快捷方式)一样简单。
          【解决方案7】:

          最有可能删除最多步骤的选项可能是编写自定义扫描实用程序,用户将下载并在其本地计算机上运行。

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

          如果这不是一个选项,您可能会考虑了解您的用户在使用他们的扫描仪软件时可能会有哪些选项。我相信现在很多程序都支持扫描到电子邮件或 ftp。

          我用于 Intranet 应用程序的解决方案是使用多功能扫描仪/复印机扫描到 Web 服务器可以访问的 SMB 共享。用户只需去复印机扫描到共享,当他们回到办公桌时,他们会转到新的扫描页面,该页面显示所有新的未处理文件的列表。

          【讨论】:

            【解决方案8】:

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

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

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

            扫描后可以调用网络服务通知服务器,网页可以定时刷新查看新图片。

            【讨论】:

              【解决方案9】:

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

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

              工作起来就像一把温暖的黄油刀!



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

              【讨论】:

                【解决方案10】:

                如果您认为 Web 应用程序仅限于 Web 浏览器,那简直是乌托邦,事实上,Web 应用程序除了 HTML 和 Javascript 之外,还可以包含很多不同的技术。

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

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

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

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

                总而言之,只要您使用 Web 标准(如 XML、SOAP 等)来执行该通信,拥有与本地硬件交互的本地软件代理不会使您的 web 应用程序少“web”。

                【讨论】:

                • Daniel,我不确定我是否完全理解您的建议。最终用户是否应该在他/她的本地计算机上安装 Perl 应用程序并让它轮询网络服务器以获取扫描作业?
                • 是的,我建议最终用户安装一个应用程序(Perl 在这里只是一个示例)并将其设置为以下之一:1)使用 XMPP 接收来自服务器的请求 2)保持一个小型 http 服务器打开并在服务器上注册以接收回调 http 调用。 3) 不断轮询服务器以查看何时有特定于该扫描仪的扫描顺序。
                【解决方案11】:

                您可以在您的网站中放置一个 Java 小程序。这可以访问扫描仪并通过 REST 将数据发送到您的 Web 服务器。

                【讨论】:

                • 请详细说明 - Java 小程序将使用哪个 API?不受信任的小程序真的可以访问扫描仪吗?
                • 必须信任小程序。如果用户不接受某种信任提升,则无法在浏览器中执行此操作。
                猜你喜欢
                • 2012-05-21
                • 1970-01-01
                • 2017-04-27
                • 1970-01-01
                • 1970-01-01
                • 2011-05-20
                • 1970-01-01
                • 1970-01-01
                • 2012-04-21
                相关资源
                最近更新 更多