我如何从浏览器触发一个扫描仪?

18
我有富士通fi-6130 TWAIN / ISIS扫描仪,希望从jQuery Rails网页的按钮触发扫描仪。 我不仅想让页面告诉扫描仪“开始”,而且还希望在扫描(单个)页面完成后通过Paperclip上传结果文件 - 最好无需要求用户导航到文件资源管理器控件手动查找文件。

每台扫描仪都通过USB连接到Windows XP桌面上,尽管我们可能会将这些呼叫中心桌面替换为Google Chrome OS。

这个问题几乎一年前就被问过了,但主要收到需要使用商业IE .NET产品的建议,这些产品成本数百美元 - 从Web应用程序(Web/扫描仪集成)与最终用户的扫描仪进行接口交互


2
很遗憾,不能真正地将浏览器与扫描仪进行接口连接。请让用户自行扫描图像并上传。 - tcooc
在浏览器中与扫描仪进行通信的一种方式是通过ActiveX控件(IE)或浏览器插件(Firefox,Chrome)。据我所知,目前没有这样的开源SDK。与其从头开始,不如花几百美元来解决问题。TWAIN是最流行的扫描仪驱动程序协议,而且很难破解。 - flysakura
1
scanner.js 允许您在 Windows 或 Mac OS 的浏览器中调用扫描仪。它也是一个商业软件包。 - Scanner.js Receipt Invoice OCR
6个回答

18

在标准的HTML/js页面内,直接访问外围设备如扫描仪是不可能的-js没有权限进行访问。

使用flash或silverlight也许是可能的,但你可能会遇到权限问题。这里有一些文章(链接)(链接),但可能会比较复杂,且并非完全符合你的需求。

如果你能够控制将运行Web应用程序的机器,我建议你使用简单的桌面客户端来执行扫描,并通过打开本地端口允许从网页连接

所以js通过AJAX调用(例如)http://localhost:1234/Services/Scan来返回图像

编辑:关于编写桌面客户端,你有很多选择。个人建议你不要尝试使用PERL/PHP,因为它们似乎不是做这项工作的正确工具,我怀疑你最终要加载COM对象来访问TWAIN设备(我们都知道这有多有趣......)

在评论中,你表明不喜欢Visual Studio-所以如果你熟悉Java,我建议你看看JTwain(商业软件,但似乎质量很好),或者从这里开始阅读。注意:我不是一个经常使用Java的开发人员,因此不能保证上述任何一个完全符合你的需求。

除此之外,我建议使用C++使用另一个IDE(尽管这不会跨操作系统)


我通过电子邮件、聊天和电话联系了富士通。他们没有任何桌面操作系统的这样的实用程序,尽管我确保他们注意到了我的请求,并建议他们直接回复这个Stackoverflow问题。我更喜欢用我熟悉的语言编写一个扫描器到监听套接字中继,但是在Windows上必须单独安装Ruby和Python。C++程序必须在该可恶的Visual Studio中生成。从呼叫中心支持的角度来看,本地的Windows脚本语言会更好,但我不知道任何一种。然后代理只能在我们使用Windows的时候工作。 - Randy J Parker
我们为我们构建的一个Web应用程序之一构建了一个本地的“客户端桌面服务”(我们称之为),尽管它没有从扫描仪获取任何功能,但这不应该太难构建。我们遇到的最大问题是本地Web服务器需要具有SSL,因为Web应用程序也使用SSL,而今天的浏览器不允许您调用不安全的服务/ API。除其他原因外,这是供应商可能不提供此类软件的一个重要原因。 - HK1
@HK1 如果需要的话,您可以创建自己的证书颁发机构,将其证书安装到本地受信任存储中,然后使用它来生成自签名证书,本地计算机将接受其为有效证书。只有在安装期间拥有管理员权限才可能实现,但并非不可克服。无论如何,很高兴您已经找到了一个能够满足您需求的解决方案。 - Basic
1
嗨@Lamar,没问题。有很多选择。在最基本的层面上,您需要打开一个网络端口并开始监听流量。这可以是打开套接字并侦听网络流量,或查找现成的服务器。Windows Communication Foundation(WCF)是框架的一部分,非常强大但配置相当复杂。对于这种简单的情况(一个或两个方法,以获取扫描/配置),并且不需要太多的灵活性,您可以从类似于此的东西开始:https://www.codeproject.com/Articles/137979/Simple-HTTP-Server-in-C [链接已更新] - Basic
1
@Lamar [或者我可能误解了你的问题 - 另一种答案]:AJAX请求只是一个连接,通过它您可以请求页面。 "Localhost" 是本地计算机,因此 http://localhost:10000 意味着“向本地计算机的端口10,000发送HTTP请求”。因此,您的工作是编写一个程序,在端口10000上侦听连接,然后读取由您的JavaScript(AJAX请求)发送的请求,然后提供适当的响应。 - Basic
显示剩余8条评论

13

有一种名为Dynamsoft的解决方案,称为Dynamic Web TWAIN,它提供了一个基于浏览器的TWAIN SDK,用于从TWAIN设备获取图像,并将其编辑和保存到远程数据库中。


1
太贵了,我的意思是我有一个需要安装在多个服务器上的应用程序。如果我选择Dynamic的解决方案,我花费在扫描部分的费用将超过整个应用程序本身的费用。 - Lamar
1
请在回答中注明您正在销售商业解决方案。 - Salik

4

2
如@Basic所提到的,可以使用JTwain来创建这样的解决方案。实际上,JTwain的开发者已经创建了ScannerJS,它允许使用JavaScript直接从浏览器(如IE、Chrome和Firefox)进行扫描。为了在您的网页中使用它,您需要:

包含scanner.js:

<html lang="en"><head>
<script src="//asprise.azureedge.net/scannerjs/scanner.js" type="text/javascript"></script>

并调用 scanner.scan:
function scanToWebPageAndUploadToWebServer() {
   scanner.scan(displayImagesOnPage,
{
"twain_cap_setting": {
    "ICAP_PIXELTYPE": "TWPT_GRAY",
    "ICAP_XRESOLUTION": "200",
    "ICAP_YRESOLUTION": "200"
},
"prompt_scan_more": true,
"discard_blank_pages": "false",
"blank_page_threshold": "0.02",
"output_settings": [
    {
        "type": "return-base64-thumbnail",
        "format": "jpg",
        "thumbnail_height": 200
    },
    {
        "type": "upload",
        "format": "pdf",
        "pdf_force_black_white": "false",
        "pdfa_compliant": "false",
        "pdf_text_line": "By ${USERNAME} on ${DATETIME}",
        "exif": {
            "DocumentName": "Doc Scan Powered by Asprise.com",
            "UserComment": "Scanned using Asprise software"
        },
        "upload_target": {
            "url": "https://asprise.com/scan/applet/upload.php?action=dump",
            "max_retries": 2,
            "post_fields": {
                "provider": "Asprise"
            },
            "cookies": "name=Asprise; domain=asprise.com",
            "auth": "user:pass",
            "headers": [
                "Referer: http://asprise.com"
            ],
            "log_file": "null",
            "max_operation_time": 600
        }
    }
]
}

    );
    }

scanner.js是一款免费的软件,适用于非常基础的低级使用。 - nilesh
13
实际上,JTwain的开发者创建了...你为什么要用第三人称谈论自己? - Basic
我在他们的网站上看不到免费版本:https://asprise.com/document-scan-upload-image-browser/web-scanner-source-code-open-order.html 我们该如何尝试它? - Lamar
请在回答中注明您正在销售商业解决方案。本主题不涉及scanner.js。 - Salik

1
似乎有一个适用于富士通fi系列扫描仪的Web API工具包。它基本上是一个应用程序,您可以在客户端机器上安装,该机器连接着扫描仪,并通过JSON或Silverlight接受调用并将其发送到扫描仪驱动程序。

http://uk.emc.com/enterprise-content-management/captiva/cloud-toolkit.htm

我刚刚下载了它并正在阅读文档,因此无法保证其是否有效。

1

您可以使用签名的小程序,使用像MMS computing这样的库。

您可以在OpenKM的代码库中看到它的使用。


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