viernes, 13 de noviembre de 2015

Cargar imagenes por XML Publisher

Para insertar imágenes en una plantilla rtf hay dos opciones. Uno es cargarlo por medio de una ruta en el servidor de aplicaciones donde se almacena la imagen que deseamos cargar a nuestra plantilla o almacenar la imagen en una tabla dentro de base de datos como un tipo Blob.

Cargar imagen por ruta
Debemos  insertar una imagen ficticia en su plantilla. Esta debe ser una imagen estática. Para eso basta con hacer clic en el vacío donde tenemos que insertar la imagen. Por ejemplo vamos a colocar la imagen en el lado izquierdo de la página. Coloque el cursor en algún lugar en el lado izquierdo de la página y ahora ve a la pestaña Insertar >> Ilustraciones >> Imagen.  Seleccione una de las imágenes y seleccione Insertar.



A partir de la imagen haga click derecho y seleccionar Tamaño. Ir a la pestaña texto alternativo.



Aquí debemos ingresar  la siguiente sintaxis para hacer referencia al directorio donde se ubica el archivo.

url:{'${XXTOP}/<IMAGE_NAME>'}

XXTOP es nuestro directorio basepath donde se ubica nuestra imagen, seguido del nombre exacto del archivo más su extensión. También es posible colocar toda la ruta completa  o indicar por medio de un valor el nombre del archivo:

Ejemplos:

url:{'/u02/oracle/testappl/xxtop/11.5.0/LOGOTIPOx.GIF'}
url:{'${XXTOP}/LOGOTIPOx.GIF'}
url: {concat{‘${XXTOP}’ , ‘ / ‘,IMAGE_FILE)}


Una vez colocado el texto, debemos dar cerrar. Podemos diseñar nuestra plantilla con la imagen ficticia, recordar que al momento de ejecutar el reporte la imagen sera modificado por la imagen a la cual le hemos colocado en el comando. previamente debemos subir la imagen al servidor de aplicaciones. La plantilla en este caso queda de la siguiente manera:



Extraer imagen por campo Blob 
Si almacena imágenes en Base de datos debe tener en cuenta que si desea enviarlo por  la estructura  XML tiene que realizar cierta codificación. A partir de la versión 5.6.2 del motor de datos XMLP  la extracción de imágenes blob se puede hacer directamente en el código XML. Puede obtener  y almacenar en un formato base64 el cual no tiene límite en el tamaño del BLOB,es decir que puede obtener más de 64 KB de datos en el formato codificado. Hay otros métodos para obtener los datos del blob, pero debe ser en formato base64.

Por ejemplo para realizar la conversión se ha optado por hacer la siguiente función.
  
FUNCTION GET_BASE64STRING( P_BLOB BLOB )
RETURN CLOB IS L_RESULTADO CLOB;

BEGIN
DBMS_LOB.CREATETEMPORARY(LOB_LOC => L_RESULTADO, CACHE => FALSE, DUR => 0);
WF_MAIL_UTIL.ENCODEBLOB (P_BLOB, L_RESULTADO);
  
RETURN L_RESULTADO; 
END GET_BASE64STRING; 
END XX_BASE64;

Terminado la función y colocado en un paquete podemos llamar al campo donde se encuentra nuestro BLOB de la siguiente manera:

XX_BASE64.get_base64String(IMAGEN_BLOB)

 La función dará como resultado una salida CLOB, tener en cuenta que debemos usar to_char para la versión de 5.6.2 del editor XML, los tipos CLOB están bien a partir del 5.6.3. en el caso de convertirlo a texto tenemos un límite de 4000 caracteres por lo que se debe tener en cuenta al momento de obtener los datos.

TO_CHAR(SUBSTR(XX_BASE64.get_base64String(IMAGEN_BLOB), 1, 4000))

En este caso se ha elaborado por plantilla de datos para enviar la información del oracle por medio de XML y mostrar por una plantilla rtf. A diferencia de Oracle Reports realizar el query y la forma de enviar los datos es mas fácil.



Para referenciar el campo en la plantilla, debemos colocar en el texto de ayuda lo siguiente:

<fo:instream-foreign-object content-type="image/jpg">   
<xsl:value-of select="IMAGEN"/>  
</fo:instream-foreign-object>   


Tener en cuenta que si en el xml solo hubiera una etiqueta con una imagen debe cambiarlo de la siguiente manera : <xsl:value-of select="//IMAGEN"/>  


La plantilla  tiene que saber el tipo de imagen, en este caso "image/jpg". El IMAGEN contiene los datos en Base64 los datos de imagen. 

Al ejecutar el reporte saldrá de la siguiente manera:




No hay comentarios:

Publicar un comentario