Imágenes jpg, bmp y Tiff en reportes VFP.

Me llamo rolando, soy nuevo en este foro. Te comento que estoy desarrollando una aplicación de arequieroctivo fijo, pero se me ha dado la necesidad de introducir imágenes en formatos JPG, BMP y TIFF en los reportes que estoy diseñando.
Ya intente usar campos general (Uso VFP 7 SP1) y lo que me guarda de las imágenes jpg (que son las que más me urgen) es solo los iconos y al imprimir el reporte, n oaparece nada más que el icono en lugar del contenido del JPG.
Me podrías compartir algún ejemplo de como enviar imágenes en campos general, ¿text o memo en un informe? Te agradecería infinitamente. Mi mail es: (xxxxxx)

1 respuesta

Respuesta
1
Yo no recomiendo guardar imágenes en las tablas, se vuelven pesadas y cuando se corrompen es una tediosa tarea de recuperarlos, pero es mi obligación y deber responderte como tu quieres así que va.
Te doy un ejemplo:
Create table grafico (grafic G)
Append General grafic From GetFile('JPG;BMP') Class Picture. Paint
Bueno, con esto ya tienes una imagen en tu tabla, imprimirlo en el repor basta con insertar un control ole dependiente y vincular como campo: gráfico. Grafic, pero aquí se vienen los problemas, el problema que mencionas justamente ocurre por que el formato JPG no se abre con Paint, o sea no esta asociado la extensión .jpg con paint, que puedes hacerlo ingresando a herramientas - opciones de carpetas - tipos de archivos, o le das botón derecho a tu archivo de imagen, propiedades y donde dice se abre con le cambias (WIN XP), bueno, si el comando que te doy como ejemplo lo pruebas con un BMP debería funcionar directamente si Paint es el predeerminado de abrir los archivos BMP, el problema comienza a partir de la clausula Class por que nunca sabemos que asociaciones tenemos en cada computador del cliente, y cuando llevas a tus clientes te encontrás con sorpresas, pero por encima de todas estas cosas, el primer párrafo es donde esta el verdadero problema, no es recomendable almacenar imágenes en una tabla, lo mejor es crear un campo del tipo carácter en donde almacenas el path (camino) del archivo: por ejemplo c:\elohim_sys\fotos\p003.jpg  y en el ole dependiente de tu repor le pones archivo en vez de campo, hay muchas opciones, la mejor no la tengo yo, pero si quieres más ideas no dudes en volver a preguntar.
P.D: Perdón por la falla en la escritura. El programa que estoy haciendo es de activo fijo. Y tengo este mes para terminarlo je je. Espero tener una respuesta tuya lo más pronto posible y de nuevo gracias por tu atención.
Hola. Gracias por tu respuesta. ¿Sabes? Probé el código que me diste tanto con JPG y BMP, pero solo funciono con bmp. Lo malo de que funcione con bmp es que me aparece el nombre de la imagen debajo de la imagen, y no quisiera que apareciera eso.
Por otra parte, probé a usar rutas y parece que así si funciona (pero me funciono en VFP9, el que uso en mi casa). ¿Crees qué para insertar la ruta de la imagen como ControlSource de la imagen OLE funcione en VFP7 (el que uso en mi trabajo)?
Es decir, ¿crees qué VFP 7 me permita tomar la ruta (o la expresión que devuelva la cadena) y ponerla en el OLE dentro del reporte para que muestre la imagen correctamente?
Y de nuevo, gracias por tu primer respuesta, he experimentado y creo que estoy conociendo mejor el OLE.
Si tal como te decía, era seguro que funcione con el BMP, por que predeterminado le pusimos Picture. Paint que controlador ole (OLECLASS) que abre el bmp en tu maquina, ahora con respecto a las rutas (la opción más conveniente) debe funcionar sin problemas con vfp7, en tu control ole dependiente en Origen de la imagen le pones archivo y listo, yo tengo funcionando eso en VFP6, por lo tanto vfp7 tendría menos problemas.
Hola, gracias por tu respuesta nuevamente. Y lo de la imagen fue un éxito, también me funciono con JPG como regalo extra. Solo quedo un problema más con mi programa, lo he diseñado para que los usuarios puedan seleccionar su impresora (como en una configuración local). Uso el comando SET PRINTER TO NAME "Nombre de impresora" para poder guardar el nombre de la impresora y usar el comando y así con SYS(1037) configuro la impresión. El problema es que cuando lanzo los informes, la impresora a la que se dirige la impresión nunca es la que seleccione, sino la impresora de Office (para archivos MDI).
La pregunta que te hago mi estimado Davsoft, es esta:
¿Hay alguna forma (ademas de la API o del SET PRINTER TO) para poder dirigir mis reportes a la impresora que he guardado en mi tabla?
Como te digo, lo que guardo es el nombre de la impresora (obtenido con GETPRINTER() y en la ejecución asignado a una variable publica) para hacer el SET PRINTER TO). Y te reitero mi agradecimiento por tu atención y tus respuestas.
Me alegro que este funcionando, ahor el tema de getprinter() tuve algunos problemas con ello, en principio solucione asignando a la variable publica así
xPrinter = upper(getprinter())
Por que con el set('printer', 3) me funcionaba y el getprinter() no, por lo que me di cuenta que getprinter() siempre daba el nombre de la impresora en minúsculas y mayúsculas, pero en fox no es tan bueno a la hora de enviar reportes en diferentes impresoras una tras otra, no se actualiza tan rapido, pero te recomiendo que envíes de esta forma tus reportes.
Repor form miReporte to printer prompt preview
de esa forma mostrara un preliminar, y cuando el usuario eliga imprimir le preguntara en que impresora quiere enviar y puede cambiar algunas configuraciones igual que sys(1037), pero si no quieres que muestra el preliminar y pregunte directamente a que impresora quieres enviar has
repor form miReporte to printer prompt
Bien, no se si entendí bien, si no es la respuesta adecuada no dudes en aclarar tu pregunta.
Gracias, ahora estoy a punto de salir, pero más tarde me conectare. Comprendo lo del PREVIEW en el REPORT FORM. Eso si sé que funciona, mi problema radica no solo en el comando, sino que mi jefe es del tipo de jefes que no les gusta estar escogiendo a cada instante, por eso lo diseño guardando el nombre de la impresora en una DBF y cuando el usuario inicia sesión (en mi aplicación), se hace el SET PRINTER TO NAME...
El prompt es una muy buena alternativa. Si hay alguna manera de que pueda utilizar el SET PRINTER TO sin problemas te agradecería algún truco, pero también considerare la forma de aplicar el PROMPT. Estuve indagando y dice que una forma de cambiar la impresora predeterminada es con Windows Scripting host. ¿Crees qué usar el WSH sea válido para setear otra impresora predeterminada o es mejor intentar con el PROMPT?
Mi mail es (xxxxxx) por si podríamos contactarnos más tarde y ahí te mostrare más detalladamente las rutinas. Gracias Davsoft.
Entiendo, ok, entonces el problema esta con SET PRINTER TO NAME, yo tengo un código que me funciona bien así, tengo una variable en donde tengo cargada el nombre de la impresora tomada con getprinter() así
xPrint = getprinter()
set printer to name (xPrint)
repor form miReporte to printer noconsole
Prueba con el paréntesis, tal ves este ahí el problema, con respecto a WSH es cierto, es fácil cambiar la impresora predeterminada de windows mediante código, pero te da problemas si usas un repor tras otra, por que los reportes fox cargan una sola vez los controladores de impresora en el preview y luego no quieren salir de la memoria, también debes tener en cuenta que si cada usuario tiene diferentes impresoras instaladas en tu dbf deben estar diferenciadas, te recomiendo usar nombres cortos en nombres de impresora y sin símbolos raros, alguna ves use el WSH para cambiar la default pero cuando quería enviar impresiones en dos impresora una tras otra pero no el problema que no lo se actualiza los driver en memoria como te había mencionado, el código que te di debe funcionar, cualquier cosa me avisas.
Hola. ¿Sabes? Probé el código que me diste y revise paréntesis y caracteres en el nombre de la impresora (lo estoy probando con VFP9 en mi casa, y las impresoras XPS y la de Office Imaging para MDI) pero el código siempre me dirige el resultado a la predeterminada (que es la MDI). ¿Imagino qué quizá usar la clausula promp sea lo mejor no crees?
También note que los informes si los abres como tablas tienen en el campo EXP en la linea Device el nombre de la impresora, ¿el cuál imagino que se carga al instante que en el comando REPORT FORM se usa PREVIEW verdad? Leí que si se cambia el nombre de la impresora en la linea DEVICE se puede hacer que se redirija la impresión a la impresora que deseemos, pero es muy tedioso (y en mi PC no funciona =P jajaja).
Realmente es extraño, el campo que dices contiene información de los datos de impresora cuando has creado el reporte, así los tamaños de papel, entre otras configuraciones, si abres el repor y tocas esos datos funcionan pero recuerda siempre de tener un backup por que puedes inutilizar el archivo, por que son meras tablas DBF, puedes enviarme el ejemplo a mi mail [email protected] si deseas para probar, tal vez pueda ayudarte mejor así.
Necesito que finalices esta pregunta, ya que son varias contestadas y sera útil a otras personas que se guían por el titulo.
Abre una con nuevo titulo para continuar.
OK, gracias por tu respuesta, aunque hoy me ocurrió u nproblema con un virus en la empresa y no sabemos de donde vino. Procurare asegurarme de que el ejemplo este libre de virus (para no arruinar tu pc) y así podre enviártelo. Aquí puntuare tus respuestas y gracias por tu apoyo.
La pregunta no admite más respuestas

Más respuestas relacionadas