miércoles, 7 de agosto de 2013

Renderizar en PDF un Informe de Reporting Services

Aprovechando los posts anteriores, vamos a explicar en este, como combinar el renderizar un informe como PDF y capturar el resultado para crear un fichero para después imprimirlo o adjuntarlo a un correo o simplemente guardarlo.
Para eso, vamos a llamar a nuestro informe utilizando el objeto automation XMLHTTP.
Gracias a el llamaremos al informe y obtendremos un stream con el resultado. Luego solamente se crea el archivo (Para que devuelva un PDF es necesario Como hemos comentado en otros posts renderizarlo en formato PDF añadiendo la opcion &Format=PDF).
También se podria hacer un fichero de excel simplemente cambiando en la url el &Format=PDF por &Format=Excel.

URL                                                   Automation       'Microsoft WinHTTP Services, version 5.1'.WinHttpRequest      
XMLHTTP                                        Automation       'Microsoft XML, v3.0'.XMLHTTP              
Grabador                                        Record               Información empresa  
btArchivoRecibido                        BigText               
isArchivoRecibido                         InStream                           
osEscribeArchivoRecibido           OutStream                    
vRespuesta                                    Variant     
 
//Creamos el objeto XMLHTTP para capturar el stream de la web
CREATE(XMLHTTP);
//Abrimos la WEB donde txtURL es la direccion de nuestro informe recordad que hay que poner el formato que queremos para renderizar
XMLHTTP.open('GET',txtURL,FALSE);
//Mandamos la cabecera
XMLHTTP.setRequestHeader('Content-Type','application/pdf');

//Establecemos la conexion
XMLHTTP.send();

//Comprobamos el status de la conexion
IF (XMLHTTP.status = 200) THEN BEGIN
  CLEAR(vRespuesta);

  //Metemos en VRespuesta el resultado del informe
  vRespuesta := XMLHTTP.responseStream;

  //Generamos el archivo fisicamente en la direccion txtFichero
  isArchivoRecibido := vRespuesta;
  btArchivoRecibido.READ(isArchivoRecibido);
  CLEAR(Grabador);
  Grabador.DELETEALL;
  Grabador.INIT;
  Grabador.Imagen.CREATEOUTSTREAM(osEscribeArchivoRecibido);
  btArchivoRecibido.WRITE(osEscribeArchivoRecibido);

  //Grabamos el fichero en la direccion txtFichero
  Grabador.Imagen.EXPORT(txtFichero,FALSE);
END;


En post sucesivos explicaremos como imprimir directamente el PDF generado desde Navision.


No hay comentarios:

Publicar un comentario