Delphi: Imagen desde archivo a Rave Reports

Etiquetas:

La forma habitual de incluir una imagen en un informe de Rave Reports es a través de una base de datos. Por ejemplo, podemos tener almacenadas todas las fotos de los productos de una empresa en una base de datos y utilizar estas fotos para imprimir un catálogo. Pero también puede interesarnos incluir en la impresión una imagen que provenga de un archivo, por ejemplo el logotipo de la empresa que tenemos guardado en un archivo BMP. [...]

Rave Reports dispone de un componente llamado "Bitmap", al cual podemos asignar una imagen de un archivo ubicado en disco, pero si cambiamos el proyecto de ordenador podemos tener problemas si necesitamos crear exactamente la misma carpeta donde se encuentra la imagen. Lo ideal es que el componente utilice una ruta dinámica, es decir, que sea Delphi quien le proporcione la ruta en el momento de la impresión. Aqui relato un par de métodos para realizar esta acción:

PRIMER MÉTODO: A TRAVÉS DE UN PARÁMETRO

1.- Creamos un proyecto nuevo en Delphi, y añadimos un componente rvProject (de la paleta Rave).

2.- Hacemos doble clic en el componente rvProject1 para abrir el editor de proyectos de Rave.

3.- En el editor de proyectos de Rave, seleccionamos "Page1" y hacemos clic en el botón que se encuentra a la derecha de la propiedad "Parameters".

En el editor de texto debemos especificar el nombre de un parámetro, que vamos a utilizar para albergar la ruta hasta el archivo de la imagen (es posible crear más parámetros si fuera necesario, uno por línea).

Decidimos un nombre para el parámetro, por ejemplo "PathLogo". Lo introducimos y hacemos clic en el botón "OK".







4.1.- Añadimos a la página un nuevo componente "DataText" de la paleta "Report".









4.2.- Ahora debemos modificar algunas propiedades del nuevo componente "DataText" creado:

Name = PathLogoTexto
Visible = False *

(*) Al modificar esta propiedad, el componente desaparece de la página, pero seguimos teniéndolo seleccionado. Si no fuera así, siempre es posible seleccionarlo utilizando el arbol de componentes situado en la parte derecha del editor de proyectos de Rave.









4.3.- También es necesario modificar la propiedad "DataField", haciendo clic en el botón situado a su derecha.

En la ventana de edición, debemos seleccionar el valor "PathLogo" en la propiedad "Project Parameters", y luego hacer clic en el botón "Insert Parameter".

Por último, clic en el botón "OK".












5.1.- Añadimos a la página un componente "Bitmap" de la paleta "Standar", ajustando su tamaño y posición al deseado.










5.2.- Activamos el editor de eventos haciendo clic en el botón "Event Editor".

Seleccionamos el valor "OnBeforePrint" en la propiedad "Available Events" e introducimos el siguiente código para este evento:

Self.FileLink := PathLogoTexto.Text;

Y para finalizar, hacemos clic en el botón "Compile".







6.- Guardamos el proyecto de Rave Reports con el menú "File -> Save As...", por ejemplo con el nombre "MiProyecto.rav". Lo ideal sería guardarlo en la misma carpeta que vaya a contener el ejecutable (EXE) de nuestro proyecto en Delphi. También colocaremos en la misma carpeta el archivo de la imagen que queremos imprimir, con el nombre "ImagenLogo.bmp".

7.- Ahora, desde Delphi, añadimos un botón en el form e introducimos en el evento "OnClick" el siguiente código:

procedure TForm1.Button1Click(Sender: TObject);
begin
  RvProject1.ProjectFile := ExtractFilePath(Application.ExeName) + 'MiProyecto.rav';
  RvProject1.Open;
  RvProject1.SetParam('PathLogo', ExtractFilePath(Application.ExeName) + 'ImagenLogo.bmp');
  RvProject1.Execute;
  RvProject1.Close;
  RvProject1.ClearParams;
end;

Si ejecutamos el proyecto en Delphi y hacemos clic en el botón del programa creado, obtendremos una página impresa con la imagen del archivo BMP.


SEGUNDO MÉTODO: A TRAVÉS DE UN COMPONENTE

El método es similar al anterior, y más corto, así que en principio solo realizamos los pasos (1), (2), (5.1) y (6).

Luego, desde Delphi, incluimos las unidades "RVClass" y "RVCsStd" en la clausula "uses" de la unit de nuestro proyecto. Por último añadimos un botón en el form e introducimos en el evento "OnClick" el siguiente código:

procedure TForm1.Button1Click(Sender: TObject);
var MiPagina:TRavePage;
    MiBmp:TRaveBitmap;
begin
  RvProject1.ProjectFile := ExtractFilePath(Application.ExeName) + 'MiProyecto.rav';
  RvProject1.Open;
  MiPagina := RVProject1.Projman.FindRaveComponent('Report1.Page1',nil) as TRavePage;
  MiBmp := RvProject1.ProjMan.FindRaveComponent('Bitmap1',MiPagina) as TRaveBitmap;
  MiBmp.Image.LoadFromFile(ExtractFilePath(Application.ExeName) + 'ImagenLogo.bmp');
  RvProject1.Execute;
  MiBmp := nil;
  MiBmp.Free;
  MiPagina := nil;
  MiPagina.Free;
  RvProject1.Close;
end;

Si ejecutamos el proyecto en Delphi y hacemos clic en el botón del programa creado, obtendremos una página impresa con la imagen del archivo BMP.


Nota: Ambos métodos funcionarán en cualquier carpeta de cualquier ordenador, siempre que mantengamos el ejecutable del proyecto en Delphi (EXE), el proyecto de Rave Reports (RAV) y la imagen (BMP) en una misma carpeta.