topaz systems software sigweb s460 pads inc firmas demoocx coldfusion topaz-signatures

coldfusion - systems - Convertir cadena de firma Topaz(hexadecimal) en imagen



topaz signature sdk (2)

Estoy tratando de integrar un bloc de firmas topaz en mi aplicación ColdFusion. Me gustaría capturar la firma del pad, convertirla a un formato que ColdFusion pueda mostrar en el navegador y guardar en el disco.

Usando su documentación, puedo recuperar la firma capturada en un formato Hexadecimal (creo). Estoy siguiendo la documentación que se encuentra en su sitio aquí: Demo básica de Javascript

Luego trato de convertir ese hexadecimal en Base64 para poder escribir la imagen en el navegador y el disco del servidor ColdFusion. Sin embargo, a ColdFusion no parece gustarle mi formato y arrojar un error.

¿¿Puede alguien ayudarme con esto??

Aquí está el código que convierte la cadena hexadecimal y también intenta hacer una imagen de ella.

<cfoutput> Form Data: #form.sigImageData#<br /> <cfscript> binaryValue = binaryDecode( form.sigImageData, "hex" ); base64Value = binaryEncode( binaryValue, "base64" ); </cfscript> Converted Data: #base64Value#<br /> <center> <cfimage action="write" destination="c:/V:/Inetpub/wwwroot/signatures/test.png" source="#base64Value#" /> </center> </cfoutput>

Javascript proporcionado por el fabricante:

<script type="text/javascript"> var Index; function pluginLoaded() { //alert("Plugin loaded!"); } function onClear() { document.getElementById(''sigplus'').clearSignature(); } function onSign() { document.getElementById(''sigplus'').tabletState = 1; document.getElementById(''sigplus'').captureMode = 1; Index = setInterval(Refresh, 50); document.getElementById(''sigplus'').antiAliasSpotSize = .85; document.getElementById(''sigplus'').antiAliasLineScale = .55; } function onDone() { if(document.getElementById(''sigplus'').totalPoints==0) { alert("Please sign before continuing"); return false; } else { document.getElementById(''sigplus'').tabletState = 0; clearInterval(Index); //RETURN TOPAZ-FORMAT SIGSTRING document.getElementById(''sigplus'').compressionMode=1; document.SigForm.bioSigData.value=document.getElementById(''sigplus'').sigString; document.SigForm.sigStringData.value+=document.getElementById(''sigplus'').sigString; //this returns the signature in Topaz''s own format, with biometric information //RETURN BMP BYTE ARRAY CONVERTED TO HEXADECIMAL STRING document.getElementById(''sigplus'').imageXSize = 500; document.getElementById(''sigplus'').imageYSize = 100; document.getElementById(''sigplus'').penWidth = 5; //SigPlus1.JustifyMode = 5; var bmpString = ''''; document.getElementById(''sigplus'').bitmapBufferWrite(5); var bmpSize = document.getElementById(''sigplus'').bitmapBufferSize(); for(var a = 0; a < bmpSize; a++) { var byte = document.getElementById(''sigplus'').bitmapBufferByte(a).toString(16); if(byte.length === 1) { bmpString += ''0''; } bmpString += byte; } document.SigForm.sigImageData.value+=bmpString; document.SigForm.sigImgData.value=bmpString; //this example returns a bitmap image converted to a hexadecimal string //convert the string back to a byte array on the server for final imaging document.SigForm.submit(); //SUBMIT THE FORM HERE } } function Refresh() { document.getElementById(''sigplus'').refreshEvent(); } </script>

Aquí está mi salida de error de ColdFusion:

The web site you are accessing has experienced an unexpected error. Please contact the website administrator. The following information is meant for the website developer for debugging purposes. Error Occurred While Processing Request An exception occurred while trying to read the image. '''' The error occurred in C:/Inetpub/wwwroot/serviceticket/sigpad/action.cfm: line 29 27 : action="writeToBrowser" 28 : source="#binaryValue#" 29 : isBase64="no"> 30 : 31 : </cfoutput> Resources: Check the ColdFusion documentation to verify that you are using the correct syntax. Search the Knowledge Base to find a solution to your problem. Browser Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 Safari/537.36 Remote Address 192.168.10.103 Referrer https://jaydien.ezservicetrax.com/serviceticket/sigpad/index.cfm Date/Time 11-Mar-14 03:37 PM Stack Trace at cfaction2ecfm1686568327.runPage(C:/Inetpub/wwwroot/serviceticket/sigpad/action.cfm:29) coldfusion.image.ImageReader$ImageReadingException: An exception occurred while trying to read the image. at coldfusion.image.ImageReader.readImage(ImageReader.java:133) at coldfusion.image.Image.<init>(Image.java:132) at coldfusion.tagext.io.ImageTag.doStartTag(ImageTag.java:401) at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2661) at cfaction2ecfm1686568327.runPage(C:/Inetpub/wwwroot/serviceticket/sigpad/action.cfm:29) at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:196) at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:483) at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65) at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:288) at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48) at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) at coldfusion.filter.PathFilter.invoke(PathFilter.java:86) at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70) at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46) at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) at coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:126) at coldfusion.CfmServlet.service(CfmServlet.java:198) at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) at jrun.servlet.FilterChain.doFilter(FilterChain.java:86) at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) at jrun.servlet.FilterChain.doFilter(FilterChain.java:94) at jrun.servlet.FilterChain.service(FilterChain.java:101) at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106) at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286) at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543) at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320) at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)


(Más de un comentario, pero un poco demasiado largo ...)

Probé la secuencia hexagonal de muestra con CF9 y obtuve el mismo resultado. Mientras que el encabezado del archivo, y el hecho de que puede abrirlo con MS Paint, sugiere que es un mapa de bits, no estoy seguro exactamente qué tipo / formato devuelve Topaz. (Skimming de la API no apareció nada pertinente hasta el momento)

Como solución temporal, podría usar objetos .net. Cargue el archivo con System.Drawing.Bitmap y System.Drawing.Bitmap escribirlo en el disco. El resultado debe ser un mapa de bits compatible con cfimage . Esta solución no es ideal, debido a la doble escritura. Sin embargo, es una opción provisional, mientras usted investiga más el formato devuelto.

<cfscript> // decode hex and save binary to file binaryData = binaryDecode(orm.sigImageData, "hex"); saveToPath = "c:/temp/original.bmp"; fileWrite(saveToPath, binaryData); // load and resave with .net Bitmap = createObject(".net", "System.Drawing.Bitmap").init(saveToPath); Bitmap.Save("c:/temp/new.bmp"); // .. cleanup </cfscript> <!--- display new image ---> <cfimage action="writeToBrowser" source="c:/temp/new.bmp" />


Partiendo de la sugerencia de Leigh, también he encontrado que su sugerencia anterior de simplemente usar FileWrite para guardar la cadena hexadecimal decodificada en el disco como un BMP y luego mostrarla en la pantalla usando la etiqueta <IMG> es una solución utilizable. De cualquier manera, puedo obtener algo en el lugar mientras tanto.

<cfset binaryValue = binaryDecode( form.sigImageData, "hex" )> <cfset FileWrite("c:/Inetpub/wwwroot/signatures/test.bmp", binaryValue)> <img src="/siguatures/test.bmp">