language-agnostic - ricoh - twain utility freeware
Interfaz con el escáner del usuario final desde una aplicación web(integración web/escáner) (11)
Bueno, han pasado dos años, así que aquí hay una actualización sobre el estado del arte para quienes se unen a nosotros.
Tanto Dynamsoft como Atalasoft tienen kits de herramientas de escaneo web de múltiples navegadores que son compatibles con cualquier pila del lado del servidor. Ambos requieren que el usuario instale un ActiveX (en IE) o un complemento NPAPI (Chrome, Firefox, etc.) para obtener acceso al escáner a través de la API de TWAIN.
Obviamente, si tiene el tiempo o un presupuesto limitado, puede crear su propio complemento. Recomiendo encarecidamente el marco del complemento FireBreath y cualquier biblioteca TWAIN en lugar de escribir su propio código TWAIN.
Una vez que se instaló el ActiveX o el complemento, el resto del trabajo es una combinación de javascript y HTML en el cliente, y algún tipo de controlador en el servidor para aceptar y procesar la imagen entrante, que se puede hacer que se parezca a un multiparte formulario enviar con un archivo adjunto.
Recomiendo hacer la carga de la imagen en javascript con AJAX, ya que forma parte de la misma "sesión" del navegador que la página web y hereda la configuración de proxy del navegador, las cookies de sesión y la autenticación del lado del servidor. No sé sobre el control de Dynamsoft, el kit de herramientas de Atalasoft incluye dicha carga de AJAX. Las imágenes se entregan desde el complemento al javascript como una cadena codificada en base64, por lo que no se crea ningún archivo local.
Descargo de responsabilidad: trabajo en el kit de herramientas de escaneo web WingScan de Atalasoft.
Considere el siguiente procedimiento de escaneo en una aplicación web típica de manejo de documentos:
- El usuario escanea un documento utilizando un escáner conectado a su computadora
- La imagen escaneada se guarda localmente en la computadora del usuario como un archivo BMP / JPG / TIF / PNG
- El usuario pulsa el botón "Examinar ..." de la carga de un archivo en la aplicación web
- Al usuario se le presenta un diálogo de archivo que utiliza para localizar la imagen escaneada.
- El usuario pulsa "Cargar imagen" y la imagen escaneada se carga en el servidor donde está almacenada
Este proceso es bastante complicado y me gustaría reducir la cantidad de pasos para que el proceso sea más fácil de usar / a prueba de tontos. En circunstancias ideales, los pasos anteriores serían reemplazados por un solo paso en el que el procedimiento inicia el escaneo del documento, el escaneo completo del documento y la carga de la imagen resultante se activa automáticamente desde la aplicación web al hacer clic en "Escanear y cargar". Desafortunadamente, parece que el estado de "integración web / escáner" es bastante bajo, por lo que podría ser una utopía.
¿Cómo abordarías este problema? Más específicamente, ¿cómo reduciría el número de pasos en el caso de uso descrito?
Dado que su audiencia es un entorno controlado, puede escribir su propia extensión / programa de navegador basado en WIA / TWAIN que realiza el escaneo. Si elige extensiones de navegador como BHO / ActiveX / XPCOM, etc., necesita obtener el permiso del usuario para instalar su extensión. Si elige escribir un programa, es posible que necesite tecnologías de implementación web como ClickOnce o Java Web Start para iniciarse desde la web.
Interfaz TWAIN es un dolor en Windows. Dejando de lado la complejidad, debe mostrar algunas GUI escritas por diferentes desarrolladores de controladores de escáner. Es posible que sea la única forma de admitir escáneres antiguos o funciones no expuestas a través de otras interfaces, como el escaneo de varias páginas a velocidad máxima desde un alimentador de documentos.
El WIA de Microsoft hace que la interfaz con el escáner sea mucho más fácil con un modelo de objetos de secuencias de comandos, sin embargo, las funciones específicas del escáner no están disponibles y algunos escáneres antiguos no son compatibles con la interfaz.
Después de escanear, puede llamar a un servicio web para notificar al servidor y la página web se puede actualizar periódicamente para verificar nuevas imágenes.
De hecho, vi a alguien en el banco hacer esto mientras configuraba mi cuenta y me sorprendió totalmente. El banco en cuestión estaba usando Windows e IE, supongo que estás en un entorno igualmente controlado. Creo que el banco utilizó una combinación de un controlador de escáner personalizado / predecible y un control ActiveX.
Una página cargada que decía "Abra el escáner", el miembro del personal colocó el documento y presionó Escanear en la página web, luego la página cambió a decir Escaneo, luego mostró el documento escaneado en la página web para que el miembro del personal lo aprobara. Solo puedo asumir que el controlador del escáner envió la imagen a una determinada ubicación y el control activo de X estaba sondeando para que apareciera, una vez que apareció, mostraba la imagen en la pantalla, una vez que el miembro del personal lo había aprobado, el activo x lo subió el fondo. Abrió la siguiente página y continuó con el resto del proceso.
Dios sabe cómo hicieron que toda esa tecnología funcionara, pero se puede hacer.
Es solo una utopía si piensa que las aplicaciones web están limitadas a los navegadores web, de hecho, las aplicaciones web pueden incluir muchas tecnologías diferentes, además de HTML y Javascript.
La mejor manera de resolver ese problema, de hecho, ya lo he utilizado para algunos dispositivos de la serie de aplicaciones de usuario, es implementar su aplicación utilizando SOAP + XMPP. Puede hacerlo en Perl usando XML :: CompileX :: Transport :: SOAPXMPP, Catalyst :: Engine :: XMPP2, Catalyst :: Controller :: SOAP y Catalyst :: Model :: SOAP.
Lo interesante del uso de XMPP es que simplifica la administración del direccionamiento, ya que usa el JID (Jabber ID) para buscar el agente de software, no un esquema de direccionamiento del puerto host +. La segunda parte interesante del uso de XMPP es que sea más fácil admitir que el servidor envíe información al cliente.
Pero si no quiere manejar XMPP, todavía puede hacer lo mismo con un servidor http ligero e integrado: HTTP :: Server :: Simple, en Perl, y de alguna manera registrar la dirección actual del escáner en el servidor para que pueda llamar de vuelta.
Y una última opción, que no es tan linda, es hacer que el agente de software examine el servidor para ver cuándo hay un pedido de "escanear documentos y cargar" para esa máquina específica y realizar esa operación cuando esté presente.
En resumen, tener un agente de software local para interactuar con el hardware local no hace que su aplicación web sea menos "web", siempre y cuando utilice estándares web, como XML, SOAP y otros, para realizar esa comunicación.
Hemos hecho algo parecido. utilizamos un programa TWAIN de línea de comandos ( http://www.burrotech.com/quickscan.php ). $$ $ 49
1) Desarrollamos una pequeña aplicación .Net para ejecutar el programa QuickScan como un comando de shell.
2) El comando fue asignado al botón Escanear.
3) Una vez que el usuario presiona el botón de escanear, aparecerá un mensaje para ingresar el nombre del archivo. El usuario guarda el ID de transacción como el nombre del archivo.
4) Otra aplicación .Net (o tal vez la mencionada anteriormente) leerá este archivo y lo cargará en la base de datos considerando que el nombre del archivo es el ID de la transacción.
¡Funcionaba como un cuchillo caliente en mantequilla!
Puede intentar mostrar la ID de transacción en IE, el usuario puede seleccionar la ID y presiona Escanear. Su aplicación leerá el texto SELECCIONADO y guardará el archivo usando el texto SELECCIONADO como el nombre del archivo. No lo hemos intentado pero debería funcionar.
Hmm, siempre quise mirar un archivo escaneado antes de hacer algo con él, pero supongo que eso depende de su escáner y de la calidad que necesite.
Si el objetivo es "automatizar el proceso de escaneo y carga" en lugar de "escribir una aplicación web", escribiría un script de AutoIt para controlar el software del escáner existente y un programa ftp simple.
Implementamos una solución para implementar Depósito Remoto para un banco. Funciona solo en IE. Se creó una dll de winforms que interactúa con la dll TWAIN de LeadTools. Leadtools TWAIN dll resume todos los minutos TWAIN. Este enfoque es ligeramente mejor que usar un control ActiveX. .NET Framework sería necesario en el cliente. Las imágenes escaneadas se devuelven a una variable oculta en la página y se procesan en el servidor.
La opción que más probablemente elimine la mayoría de los pasos, probablemente sería escribir una utilidad de escaneo personalizada que el usuario descargaría y ejecutaría en su máquina local.
SANE o TWAIN se encargarían de obtener la imagen escaneada. CURL podría manejar la carga de la imagen a su aplicación web. Para hacer las cosas aún más fáciles para el usuario final, usaría algo como una conexión Comet para actualizar la página web cuando el archivo estuviera disponible.
Si esa no es una opción, puede buscar ver qué opciones probablemente tendrán sus usuarios utilizando el software de sus escáneres. Creo que muchos programas ahora admiten el escaneo a correo electrónico o ftp.
La solución que utilicé para una aplicación de intranet, utilizando escáneres / copiadoras multifunción fue escanear a un recurso SMB al que tenía acceso el servidor web. El usuario solo va a la copiadora escanea el recurso compartido y cuando vuelve a su escritorio, accede a la nueva página de escaneo que muestra una lista de todos los archivos nuevos sin procesar.
Puedes poner un applet de Java en tu sitio web. Esto puede acceder al escáner y enviar los datos a través de REST a su servidor web.
Si su público objetivo está ejecutando Windows e IE, y no le importa gastar unos pocos $$, Atalasoft tiene algunos componentes que harán lo que está buscando.
Silverlight 4 saldrá pronto. Se supone que tiene la capacidad de interactuar con objetos COM en la computadora del usuario (siempre que estén ejecutando Windows). En teoría, usted llama a los métodos WIA desde su página web de Silverlight.