Page 1 of 2
tableta de captura de firma en formato digital
Posted: Mon Aug 07, 2017 5:57 pm
by miarcod
Hola,
Estoy probando una tableta para la captura de firma, como la que tienen los bancos, pero no se por donde empezar
¿Alguien la está utilizando?
Algún ejemplo, o ayuda será bienvenido
Gracias
Re: tableta de captura de firma en formato digital
Posted: Mon Aug 07, 2017 7:41 pm
by cnavarro
Marca y modelo?
Re: tableta de captura de firma en formato digital
Posted: Mon Aug 07, 2017 8:05 pm
by miarcod
WACOM STU-430/G
Re: tableta de captura de firma en formato digital
Posted: Mon Aug 07, 2017 8:44 pm
by cnavarro
Entiendo que te han de proporcionar alguna DLL, o algún SDK para su programación desde cualquier lenguaje
------------------------------------------- EDITO -----------------------------------------------
Si, he visto esto
http://signature.wacom.eu/es/productos/ ... tware-sdk/
Re: tableta de captura de firma en formato digital
Posted: Tue Aug 08, 2017 12:46 pm
by karinha
Re: tableta de captura de firma en formato digital
Posted: Tue Aug 08, 2017 4:28 pm
by miarcod
gracias,
voy a ver si consigo la información
Re: tableta de captura de firma en formato digital
Posted: Thu Aug 10, 2017 2:57 pm
by russimicro
Buena día...
Esta fue mi solución...
1. Las pen tablet, funcionan como una extensión del mouse y de la pantalla
2. Una vez instalada cualquier marca de pen tablet, queda habilita esta función y ya puede usar el lápiz sobre la tablet y dibujar. Esta función la puede
hacer a manera de prueba con el mouse sobre la aplicación que captura la digitalización ( dibujar a mano alzada), que puede ser microsoft paint o
una aplicación propia ( desarrollo)
3. En fivewin lo puede implementar con la clase TGRAPH
En estos días estoy desarrollando una app para manejo y registro de firmas, fotos y huellas y me encontré con los siguientes problemas :
A. Para la firma se debe capturar y luego recortar para que la imagen resultante no sea del tamaño de la ventana y que al imprimir se pueda ajustar
y ser legible en una área de firma de documento, no encontré esta opción en fivewin , sino que en java .
B. La solución fue en java (captura firma, la recorta y genera la imagen) y hacer interface desde mi app-fivewin mediante paso de parámetros
(directo o con archivo texto), y lanzar y cerrar la app-java desde fivewin como si fuera una ventana mas de mi app-fivewin.
( No se nota que es una app externa)
C. De esta forma ya tengo una app para toma de huellas, toma de fotos, lectura de basculas POS y ahora captura de firmas.
Con gusto le puedo ampliar este tema...
* todo lo hice con ejemplos java tomados de los fabricantes y adaptadas por terceros - google + el ajuste o desarrollo particular en java
Johnson Russi
Colombia
Re: tableta de captura de firma en formato digital
Posted: Tue Aug 22, 2017 7:19 pm
by miarcod
Bueno, me he puesto en contacto con el fabricante y he descargado el SDK, pero no se por donde tirar,
Tengo libreriras para C, pero al intentar enlazarlas en un ejemplo que tiene para C me tira el error
Code: Select all
Turbo Incremental Link 6.70 Copyright (c) 1997-2014 Embarcadero Technologies, Inc.
Error: 'X:\CEPP\FUENTES\FW\WACOM\LIB\W32\WGSSSTU.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
creo que el problema es que estan escritas para otro compilador.
tambien tengo la DLL "wgssSTU.DLL" y ahora estoy intentando usar una DLL pero no no se que funciones puedo utilizar y como llamarlas.
La documentación se refiere a esta clase como la primera para obtener los dispositvos conectados
For those wanting to skip any preamble, the key classes and functions are:
wgssSTU::UsbDevices – retrieves an array of attached USB tablets.
wgssSTU::UsbInterface and wgssSTU::SerialInterface – connects to a specific tablet.
wgssSTU::Tablet – queries and controls a tablet.
wgssSTU::JScript – provides helper routines for use in HTML.
Intento leeer el array de dispositivos con este ejemplo
Code: Select all
Function main()
pruebaC()
Msginfo("fin")
RETURN NIL
STATIC FUNCTION PruebaC()
Testear()
RETURN NIL
FUNCTION Testear()
Local x
x := WgssSTU():UsbDevices() // Array de tablets conectadas
RETURN NIL
DLL FUNCTION WgssSTU() AS LONG PASCAL LIB "wgssSTU.DLL"
//DLL FUNCTION WgssSTU() AS LONG PASCAL FROM "WgssSTU" LIB "wgssSTU.dll"
*/
Re: tableta de captura de firma en formato digital
Posted: Tue Aug 22, 2017 7:21 pm
by cnavarro
Parece que la lib es para Visual Studio, compila con las libs de fw para visual studio
Seguramente tengas que desarrollar un wrapper de la lib para poder acceder a las funciones
Re: tableta de captura de firma en formato digital
Posted: Thu Sep 14, 2017 6:41 pm
by miarcod
Bueno, sigo con el tema,
Estoy probando los ejemplos que me pasaron en javascript y hay algo que no funciona.
A ver si alguien me puede echar una mano
Cuando ejecuto la pagina con internet explorer la imagen se carga correctamente en la tablet, pero cuando lo hago yo, la imagen no se carga bien aunque se carga algo y además se produce un error en metodo tablet:writeimage
¿Alguna idea?
Gracias
pagina javascript
Code: Select all
<html>
<head>
<title>SendToSTU</title>
<script type="text/javascript">
<!--
// ==========================================================================
// Utilities
//
function print(txt) {
var txtDisplay = document.getElementById("txtDisplay");
txtDisplay.value += txt + "\n";
txtDisplay.scrollTop = txtDisplay.scrollHeight; // scroll to end
}
function dec2hex(i) {
return( "0x" + ((i<16)?"0":"") + i.toString(16).toUpperCase()); // add leading zero if < 16 e.g. 0x0F
}
function DisplayImage() {
var filename = document.getElementById("imgFilename").value;
document.getElementById("idImg").src = filename;
}
function SendToSTU() {
DisplayImage();
var filename = document.getElementById("imgFilename").value;
print("SendToSTU: " + filename);
sdkSendToSTU(filename);
}
function getCurrentDir() {
var scriptFullName = window.location.pathname; // gets /c:/pathname/file.html
scriptFullName = scriptFullName.replace(/\//g,"\\"); //convert all '/' to '\'
var scriptPath = scriptFullName.substring( 1, scriptFullName.lastIndexOf("\\")+1 ); // c:\pathname\
scriptPath = unescape(scriptPath); // change %20 back to space
return( scriptPath );
}
function OnLoad() {
document.getElementById("imgFilename").value = getCurrentDir() + "640x480.png"; // default to STU-500
DisplayImage();
print("Use the [Browse] button to select an image file. Sample images are included in this folder:");
print( getCurrentDir() );
print("To display the image on an STU press [Send Image to STU]");
}
// ==========================================================================
// SDK Application code
//
// enumerations copied from SDK\COM\doc with reformatted syntax
enumEncodingFlag = { // encodingFlag reports what the STU device is capable of:
EncodingFlag_Zlib : 0x01,
EncodingFlag_1bit : 0x02, // mono
EncodingFlag_16bit : 0x04, // 16bit colour (520/530)
EncodingFlag_24bit : 0x08 // 24bit colour (530)
}
enumEncodingMode = { // selects image transformation
EncodingMode_1bit : 0x00, // mono display STU300/430/500
EncodingMode_1bit_Zlib : 0x01, // use zlib compression (not automated by the SDK – the application code has to compress the data)
EncodingMode_16bit : 0x02, // colour stu-520 & 530
EncodingMode_24bit : 0x04, // colour STU 530
// tablet.supportsWrite() is true if the bulk driver is installed and available
EncodingMode_1bit_Bulk : 0x10, // use bulk driver (520/530)
EncodingMode_16bit_Bulk : 0x12,
EncodingMode_24bit_Bulk : 0x14,
EncodingMode_Raw : 0x00,
EncodingMode_Zlib : 0x01,
EncodingMode_Bulk : 0x10,
EncodingMode_16bit_565 : 0x02
}
enumScale = {
Scale_Stretch : 0,
Scale_Fit : 1,
Scale_Clip : 2
}
var tablet;
var protocolHelper;
function sdkSendToSTU(filename) {
if (connect())
{
try
{
var caps = tablet.getCapability();
var info = tablet.getInformation();
print("STU model: " + info.modelName);
var pId = tablet.getProductId();
print("Product id: "+ dec2hex(pId));
var encodingFlag = protocolHelper.simulateEncodingFlag(pId, caps.encodingFlag);
print("encodingFlag: " + dec2hex(encodingFlag));
if ((encodingFlag & enumEncodingFlag.EncodingFlag_24bit) != 0)
{
encodingMode = tablet.supportsWrite() ? enumEncodingMode.EncodingMode_24bit_Bulk : enumEncodingMode.EncodingMode_24bit;
}
else if ((encodingFlag & enumEncodingFlag.EncodingFlag_16bit) != 0)
{
encodingMode = tablet.supportsWrite() ? enumEncodingMode.EncodingMode_16bit_Bulk : enumEncodingMode.EncodingMode_16bit;
}
else
{
// assumes 1bit is available
encodingMode = enumEncodingMode.EncodingMode_1bit;
}
print("encodingMode: " + dec2hex(encodingMode));
var stuImage = protocolHelper.resizeAndFlatten(unescape(filename), 0, 0, 0, 0, caps.screenWidth, caps.screenHeight, encodingMode, enumScale.Scale_Fit, false, 0);
tablet.writeImage(encodingMode, stuImage); // uses the colour mode flags in encodingMode
tablet.disconnect();
}
catch(e)
{
print("Exception: " + e.message);
}
}
}
function connect()
{
var connected = false;
try
{
var usbDevices;
usbDevices = new ActiveXObject("WacomGSS.STU.UsbDevices");
var count = usbDevices.Count;
if (count > 0)
{
var usbDevice = usbDevices.Item(0); // use the first STU found in the list.
if (tablet == null)
{
protocolHelper = new ActiveXObject("WacomGSS.STU.ProtocolHelper");
tablet = new ActiveXObject("WacomGSS.STU.Tablet");
}
var r1 = tablet.usbConnect(usbDevice, false);
var r = r1.value;
if (r == 0)
{
connected = true;
}
else
{
print("Connect failed");
}
}
else
{
print("No devices connected");
}
usbDevices = null;
}
catch (e)
{
print("Exception: "+ e.message);
}
return connected;
}
-->
</script>
</head>
<body onload="OnLoad()">
<h1>SendToSTU</h1>
<table>
<tr>
<td style="border:1px solid black;width:250pt;height:190pt;">
<img id="idImg" style="width:250pt;"/>
</td>
<td>
<input type="button" value="Send Image to STU" style="width:40mm;margin-left:5mm" onClick="SendToSTU();"
title="Sends the image file to the STU display"/>
</td>
</tr>
</table>
<p/>
<input type="hidden" id="imgFilename" />
<input type="file" id="browseFile" size=80 onchange="imgFilename.value=this.value;DisplayImage();" />
<br/><br/>
<textarea cols="125" rows="15" id="txtDisplay"></textarea>
</body>
</html>
y esto es lo que yo he generado en harbour
Code: Select all
#include "FiveWin.Ch"
#define NTRIM(n) ( LTrim( Str( n ) ) )
//#define print(x) msginfo(x)
#translate print( <v1>[, <v2>]) => ;
depura( <v1> [, <v2> ] )
STATIC UsbDevices, usbDevice, tablet, protocolHelper, r, r1
//------------------------------------------------------------------------//
Function main()
If MsgNoYes("Borrar")
BorrarTablet()
Else
EnviarImagen()
EndIf
print("fin")
RETURN NIL
//------------------------------------------------------------------------//
Function Connect()
Local nCount //, r1, r
//Local usbDevices, nCount
//Local usbDevice, tablet, protocolHelper, r1, r
Local Connected := .F.
nCount := 0
TRY
usbDevices = createObject("WacomGSS.STU.UsbDevices")
nCount := usbDevices:Count
CATCH
Msginfo("Falta el driver de conexion STU")
RETURN Connected
END
If nCount ==0
WindAviso("No se localizaron dispositivos STU")
Return Connected
EndIf
with object usbDevices
usbDevice := :Item(0)
End
protocolHelper = createObject("WacomGSS.STU.ProtocolHelper")
tablet = createObject("WacomGSS.STU.Tablet")
r1 = tablet:usbConnect(usbDevice, 0)
r = r1:value
If r = 0
Connected = .t.
Else
WindAviso("No se pudo conectar")
EndIf
Return Connected
//------------------------------------------------------------------------//
#define EncodingFlag_Zlib 0x01
#define EncodingFlag_1bit 0x02 // mono
#define EncodingFlag_16bit 0x04 // 16bit colour (520/530)
#define EncodingFlag_24bit 0x08 // 24bit colour (530)
/*
enumEncodingFlag = { // encodingFlag reports what the STU device is capable of:
EncodingFlag_Zlib : 0x01,
EncodingFlag_1bit : 0x02, // mono
EncodingFlag_16bit : 0x04, // 16bit colour (520/530)
EncodingFlag_24bit : 0x08 // 24bit colour (530)
}
*/
#define EncodingMode_1bit 0x00 // mono display STU300/430/500
#define EncodingMode_1bit_Zlib 0x01 // use zlib compression (not automated by the SDK – the application code has to compress the data)
#define EncodingMode_16bit 0x02 // colour stu-520 & 530
#define EncodingMode_24bit 0x04 // colour STU 530
// tablet.supportsWrite() is true if the bulk driver is installed and available
#define EncodingMode_1bit_Bulk 0x10 // use bulk driver (520/530)
#define EncodingMode_16bit_Bulk 0x12
#define EncodingMode_24bit_Bulk 0x14
#define EncodingMode_Raw 0x00
#define EncodingMode_Zlib 0x01
#define EncodingMode_Bulk 0x10
#define EncodingMode_16bit_565 0x02
/*
enumEncodingMode = { // selects image transformation
EncodingMode_1bit : 0x00, // mono display STU300/430/500
EncodingMode_1bit_Zlib : 0x01, // use zlib compression (not automated by the SDK – the application code has to compress the data)
EncodingMode_16bit : 0x02, // colour stu-520 & 530
EncodingMode_24bit : 0x04, // colour STU 530
// tablet.supportsWrite() is true if the bulk driver is installed and available
EncodingMode_1bit_Bulk : 0x10, // use bulk driver (520/530)
EncodingMode_16bit_Bulk : 0x12,
EncodingMode_24bit_Bulk : 0x14,
EncodingMode_Raw : 0x00,
EncodingMode_Zlib : 0x01,
EncodingMode_Bulk : 0x10,
EncodingMode_16bit_565 : 0x02
}
*/
#define Scale_Stretch 0
#define Scale_Fit 1
#define Scale_Clip 2
/*
enumScale = {
Scale_Stretch : 0,
Scale_Fit : 1,
Scale_Clip : 2
}
*/
#define false 0
FUNCTION BorrarTablet()
If !Connect()
RETURN NIL
EndIf
print("Tablet conectada")
tablet:setClearScreen()
tablet:disconnect()
print("tablet borrada")
return nil
FUNCTION unescape(xValue) ; RETURN xValue
FUNCTION EnviarImagen()
Memvar oErr
Local caps, info, pId, encodingFlag, encodingMode, stuImage, filename
BorrarTablet()
If !Connect()
RETURN NIL
EndIf
print("Tablet conectada")
caps = tablet:getCapability()
info = tablet:getInformation()
print("STU model: " + info:modelName)
pId = tablet:getProductId()
print("Product id: "+ dec2hex(pId))
encodingFlag = protocolHelper:simulateEncodingFlag(pId, caps:encodingFlag)
print("encodingFlag: " + dec2hex(encodingFlag))
If nAnd(encodingFlag, EncodingFlag_24bit ) != 0
encodingMode = iif(tablet:supportsWrite(), EncodingMode_24bit_Bulk, EncodingMode_24bit)
elseif nAnd(encodingFlag , EncodingFlag_16bit) != 0
encodingMode = iif(tablet:supportsWrite(), EncodingMode_16bit_Bulk, EncodingMode_16bit)
else
encodingMode = EncodingMode_1bit
EndIf
print(encodingflag)
print(EncodingFlag_24bit )
print(nAnd(EncodingFlag, EncodingFlag_Zlib ))
print(nAnd(EncodingFlag, EncodingFlag_1bit ))
print(nAnd(EncodingFlag, EncodingFlag_16bit))
print(nAnd(EncodingFlag, EncodingFlag_24bit ))
print(tablet:supportsWrite(), "suportswrite")
print("encodingMode: " + dec2hex(encodingMode))
filename := unescape("imagen.jpg")
stuImage = protocolHelper:resizeAndFlatten(filename, 0, 0, 0, 0, caps:screenWidth, caps:screenHeight, encodingMode, Scale_Fit, .f., 0)
print(filename, "filename")
print(caps:screenWidth, "screenwidth")
print(caps:screenHeight, "screenhigh")
print(encodingMode, "encondingmode")
print(Scale_Fit, "ScaleFit")
TRY
tablet:writeImage(encodingMode, stuImage) // uses the colour mode flags in encodingMode
CATCH oErr
Msginfo("Error en la escritura de la tablet")
END
tablet:disconnect()
RETURN NIL
Re: tableta de captura de firma en formato digital
Posted: Fri Sep 15, 2017 10:07 am
by mastintin
¿ Que tipo de captura de firma necesitas ? .
Me refiero si simplemente es capturar una imagen de firma o se trata de que se "realmente segura" con todo lo que aporta wacom, de seguridad en trazos, certificado,fechado , etc
Yo me peleé con una de un amigo hace como un año.
Si lo que buscas requiere "seguridad" la opción facil es usar el programa de generacíon de pdf que trae la tableta, te permite personalizar ciertos parametros ( limitados) pero te genera "pdf seguros" con un monton de información sobre la firma. Si necnesitas personalizarlo mucho mas tienes que tirar del sdk que ademas creo que era de pago .
Para una cosa simple donde quieras recoger los trazos tienes un sdk mas simple con ejemplos en varios idiomas de programación. Yo lo intente intentando crear un wrapper a harbour pero no funcionaba como debería.
La solución final para mi ( que solo pretendía capturar la firma ) fue coger el ejemplo que tienes en Delphi y modificarlo un poco para poner el logo de fondo de pantalla y los tesxto que quería mostar y que generase una imagen de la firma .
Es un exe delphi con unos pocos parametros en un fichero ini. Se llama desde el programa fwh.exe , se espera a que genere el archivo imagen de la firma y se cierra el programa y se devuelve el control al exe fwh para que genere el pdf con la firma ...
Re: tableta de captura de firma en formato digital
Posted: Fri Sep 15, 2017 12:29 pm
by miarcod
Gracias por responder,
De momento estoy haciendo pruebas,
El caso es que estoy jugando un poco con la tableta para ver que se puede hacer y como es la primera vez que trabajo con objetos COM estoy un poco perdido,
Lo que me sorprende es que cuando ejecuto la pagina html, el codigo javascript hace el trabajo correctamente, (enviar una imagen que aparece en la tablet) pero cuando lo hago con harbour se envia la imagen (pero no sale correctamente) y se genera un error.
Creo que debe se por el tipo de algun dato (int, long...) que le paso a la funcion pero no se como comprobar.
caps = tablet:getCapability()
la variable caps que se carga con el metodo getCapability() devuelve un objeto con varios valores pero de distintos tipos segun la documentacion
UNIT16 y UNIT8
Creo que el problema está en el metodo
protocolHelper.resizeAndFlatten
en javascript es
var stuImage = protocolHelper.resizeAndFlatten(unescape(filename), 0, 0, 0, 0, caps.screenWidth, caps.screenHeight, encodingMode, enumScale.Scale_Fit, false, 0)
En harbour lo he traducido y los valores que envio a la funcion son los mismos pero el resultado es que aparece en la tablet una imagen que es como si se viera la imagen ampliada y a continuación se genera un error.
Code: Select all
filename := "imagen.jpg"
stuImage = protocolHelper:resizeAndFlatten(filename, 0, 0, 0, 0, caps:screenWidth, caps:screenHeight, encodingMode, Scale_Fit, .f., 0)
TRY
tablet:writeImage(encodingMode, stuImage) // uses the colour mode flags in encodingMode
CATCH oErr
Msginfo("Error en la escritura de la tablet")
END
Un saludo
Re: tableta de captura de firma en formato digital
Posted: Thu Nov 16, 2017 11:35 am
by AngelSalom
Hola amigos, ¿algún avance al respecto? Me toca pelearme también con una wacom.
Saludos!
Re: tableta de captura de firma en formato digital
Posted: Tue Nov 21, 2017 9:52 am
by AngelSalom
mastintin wrote:¿ Que tipo de captura de firma necesitas ? .
Me refiero si simplemente es capturar una imagen de firma o se trata de que se "realmente segura" con todo lo que aporta wacom, de seguridad en trazos, certificado,fechado , etc
Yo me peleé con una de un amigo hace como un año.
Si lo que buscas requiere "seguridad" la opción facil es usar el programa de generacíon de pdf que trae la tableta, te permite personalizar ciertos parametros ( limitados) pero te genera "pdf seguros" con un monton de información sobre la firma. Si necnesitas personalizarlo mucho mas tienes que tirar del sdk que ademas creo que era de pago .
Para una cosa simple donde quieras recoger los trazos tienes un sdk mas simple con ejemplos en varios idiomas de programación. Yo lo intente intentando crear un wrapper a harbour pero no funcionaba como debería.
La solución final para mi ( que solo pretendía capturar la firma ) fue coger el ejemplo que tienes en Delphi y modificarlo un poco para poner el logo de fondo de pantalla y los tesxto que quería mostar y que generase una imagen de la firma .
Es un exe delphi con unos pocos parametros en un fichero ini. Se llama desde el programa fwh.exe , se espera a que genere el archivo imagen de la firma y se cierra el programa y se devuelve el control al exe fwh para que genere el pdf con la firma ...
Hola mastintin , ¿sería posible que me pasaras el fuente Delphi modificado? Me basta con recoger la firma sin más florituras.
Re: tableta de captura de firma en formato digital
Posted: Tue Nov 21, 2017 2:10 pm
by mastintin
AngelSalom wrote:
Hola mastintin , ¿sería posible que me pasaras el fuente Delphi modificado? Me basta con recoger la firma sin más florituras.
Lo busco y te envío lo que tengo .Facilitame un mail ...