Ir para conteúdo
Fórum Script Brasil
  • 0

Rave Report exibindo Jpeg


RafaelemeNt

Pergunta

Bom dia srs

Estou com dúvidas em relação à utilização de Imagens no RaveReport.

O problema é: tenho armazenado já em minha tabela (num campo BLOB) uma imagem JPG. O problema, é que preciso exibir essa imagem no relatório, em Rave. Fiz testes com relação à imagens BMP e funcionou corretamente, mas JPEG não.

Pesquisei a respeito de um componente chamado "JPEG Image Component ver 1.0", porém não consigo achá-lo para download. Alguém já utilizou? Ele funciona para essa finalidade que preciso? Onde posso encontrá-lo?

Se alguém tiver alguma outra sugestão para que eu exiba os jpgs no relatório, também aceito!! Não importam os meios, mas sim os objetivos.

Agradeço a atenção dos srs,

Rafael Henrique

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Olá amigo Jhonas

Obrigado por responder. Por coincidência, esse foi justamente o tópico em que eu vi esse componente. Porém, quando tento acessar o link para download desse componente, sou enviado a uma página com assunto totalmente diferente. Pesquisei aqui no Sript Brasil também, porém, ainda não vi ninguém com um problema parecido.

Contudo, continuei procurando, e achei 2 rotinas para serem executadas, que, PELO QUE EU ENTENDI, elas transformam a imagem JPEG para o formato nativo do Rave Report. As rotinas são essas:

uses JPEG;

procedure TForm1.ReportSystem1Print(Sender: TObject);
var
  Stream: TMemoryStream;
  Image: TJPEGImage;
begin
  With Sender as TBaseReport do begin
    Stream := TMemoryStream.Create;
    Image := TJPEGImage.Create;
    try
      Image.LoadFromFile('image1.jpg');
      Image.SaveToStream(Stream);
      Stream.Position := 0;
      PrintImageRect(1,1,3,3.5,Stream,'JPG');
    finally
      Image.Free;
      Stream.Free;
    end; { tryf }
  end; { with }
end;
procedure TForm1.ReportSystem1DecodeImage(Sender: TObject;
  ImageStream: TStream; ImageType: String; Bitmap: TBitmap);
var
  Image: TJPEGImage;
begin
  If ImageType = 'JPG' then begin
      Image := TJPEGImage.Create; // Create a TJPEGImage class    
      try
         Image.LoadFromStream(ImageStream); // Load up JPEG image from ImageStream
         Image.DIBNeeded; // Convert JPEG to bitmap format
         Bitmap.Assign(Image);
      finally
         Image.Free;
      end;
  end; { if }
end;
Porém, estou com um pequeno problema na linha:
Image := TJPEGImage.Create;
Eu recebo a mensagem de erro:
[Error] untDmVistomax.pas(151): Incompatibles types: 'String' and 'TJPEGImage';
[Fatal Error] VistoMax.dpr(7): Could not compile used unit 'untDmVistomax.pas'

Porém, esse exemplo eu peguei diretamente no site da Nevrona.com mas não consigo usar! Pra falar a verdade, eu não entendi muito bem o que esse código faz, mas gostaria de testá-lo.

Agradeço a atenção, e fico no aguardo de sugestões e opiniões.

Rafael Henrique

Link para o comentário
Compartilhar em outros sites

  • 0
Porém, esse exemplo eu peguei diretamente no site da Nevrona.com mas não consigo usar! Pra falar a verdade, eu não entendi muito bem o que esse código faz, mas gostaria de testá-lo.

Compilei este código.. não tem erros

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure ReportSystem1DecodeImage(Sender: TObject;
    ImageStream: TStream; ImageType: String; Bitmap: TBitmap);
    procedure ReportSystem1Print(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

uses JPEG;

procedure TForm1.ReportSystem1DecodeImage(Sender: TObject;
  ImageStream: TStream; ImageType: String; Bitmap: TBitmap);
var
  Image: TJPEGImage;
begin
  If ImageType = 'JPG' then begin
      Image := TJPEGImage.Create; // Create a TJPEGImage class
      try
         Image.LoadFromStream(ImageStream); // Load up JPEG image from ImageStream
         Image.DIBNeeded; // Convert JPEG to bitmap format
         Bitmap.Assign(Image);
      finally
         Image.Free;
      end;
  end; { if }
end;


procedure TForm1.ReportSystem1Print(Sender: TObject);
var
  Stream: TMemoryStream;
  Image: TJPEGImage;
begin
    With Sender as TBaseReport do begin
    Stream := TMemoryStream.Create;
    Image := TJPEGImage.Create;
    try
      Image.LoadFromFile('image1.jpg');
      Image.SaveToStream(Stream);
      Stream.Position := 0;
      PrintImageRect(1,1,3,3.5,Stream,'JPG');
    finally
      Image.Free;
      Stream.Free;
    end; { tryf }
  end; { with }
end;


end.

O primeiro converte a imagem JPG para BMP

O Segundo Imprime a imagem JPG em um tamanho especifico

Outros componentes

http://www.delphiarea.com/products/delphi-...onents/picshow/

http://www.torry.net/pages.php?id=104

Ou faça uma busca no forum

http://scriptbrasil.com.br/forum/index.php...mp;highlite=jpg

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Jhonas, obrigado pela atenção

Compilei este código.. não tem erros

Eu tentei compilar junto a minha aplicação e aparece o erro na linha

Image := TJPEGImage.Create;

... incompatibilidade de tipos. Porém, o problema não é na aplicação.

Eu consegui carregar as imagens JPG para a aplicação, e inclusive consigo até gravar no Banco de Dados. Meu grandissíssimo problema é exibi-las no relatório, criado no Rave. Só existem 2 componentes no rave que posso usar: "Bitmap" e "Metafile". Tentei utilizar ambos, mas sem sucesso. Se a imagem armazenada no banco de dados não for BMP, dá erro de formato.

É tão raro exibir imagens JPG armazenadas no banco de dados, via Relatórios RAVE??? Desde a manhã estou procurando material sobre isso e não acho.

Agradeço a atenção.

Editado por RafaelemeNt
Link para o comentário
Compartilhar em outros sites

  • 0
Porém, estou com um pequeno problema na linha:
Image := TJPEGImage.Create;
Eu recebo a mensagem de erro:
[Error] untDmVistomax.pas(151): Incompatibles types: 'String' and 'TJPEGImage';
[Fatal Error] VistoMax.dpr(7): Could not compile used unit 'untDmVistomax.pas'
Tipos incompatíveis: String e TJPEGImage
Image: TJPEGImage;
Voce deve procurar e tirar do seu código onde existe uma definição para a variavel Image como string
Só existem 2 componentes no rave que posso usar: "Bitmap" e "Metafile". Tentei utilizar ambos, mas sem sucesso. Se a imagem armazenada no banco de dados não for BMP, dá erro de formato.
Voce mesmo responde parte do problema: Só existem 2 componentes no rave que posso usar: "Bitmap" e "Metafile". Se a imagem armazenada no banco de dados não for BMP, dá erro de formato Motivo pelo qual foi usada esta rotina para ler o formato JPG e transformá-lo em BMP
uses JPEG;

procedure TForm1.ReportSystem1DecodeImage(Sender: TObject;
  ImageStream: TStream; ImageType: String; Bitmap: TBitmap);
var
  Image: TJPEGImage;
begin
  If ImageType = 'JPG' then begin
      Image := TJPEGImage.Create; // Create a TJPEGImage class
      try
         Image.LoadFromStream(ImageStream); // Load up JPEG image from ImageStream
         Image.DIBNeeded; // Convert JPEG to bitmap format
         Bitmap.Assign(Image);
      finally
         Image.Free;
      end;
  end; { if }
end;
OBS: Acho que a versão do Rave que voce esta usando não permite o uso direto do formato JPG, caso contrario poderia usar a outra rotina para imprimir
procedure TForm1.ReportSystem1Print(Sender: TObject);
var
  Stream: TMemoryStream;
  Image: TJPEGImage;
begin
    With Sender as TBaseReport do begin
    Stream := TMemoryStream.Create;
    Image := TJPEGImage.Create;
    try
      Image.LoadFromFile('image1.jpg');
      Image.SaveToStream(Stream);
      Stream.Position := 0;
      PrintImageRect(1,1,3,3.5,Stream,'JPG');
    finally
      Image.Free;
      Stream.Free;
    end; { tryf }
  end; { with }
end;
Neste caso voce pode tentar No evento onGetRow do seu TRvDataSetConnection chame a procedure:
CarregaRaveImagem(NomeDoRelatorio.Page1,NomeDoComponenteImagemNoRave,CaminhoDaImagem); 
Connection.DoGetRow;
Crie esta procedure no seu projeto (na Unit onde estiver os componentes do rave):
procedure CarregaRaveImagem(rvPagina,rvImagemNome,bdArquivo:String); 
var 
  B: TRaveBitmap; 
  P: TRavePage; 
  Jpg: TJpegImage; 
begin 
  // Cria Objeto JPEGImage para carregar o arquivo Jpeg. 
  Jpg := TJpegImage.Create; 
  try 
    // Pesquisa componentes dentro do projeto rave. 
    P := RvSisterm.ProjMan.FindRaveComponent(rvPagina, nil) as TRavePage; 
    B := RvSisterm.ProjMan.FindRaveComponent(rvImagemNome, P) as TRaveBitmap; 
    // verifica se existe um JPG referente a imagem 
    if FileExists(bdArquivo) then 
       begin 
          // Carrega o arquivo do disco. 
          Jpg.LoadFromFile(bdArquivo); 
          // Atribui ao Rave Bitmap component. 
          B.Image.Assign(Jpg); 
       end; 
   finally 
      Jpg.Free; 
   end; 

end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Exemplo: inserir uma imagem no cabeçalho do relatório.

Volte ao código do evento PrintHeader e altere conforme código abaixo:

var
  Bitmap : TBitmap;
begin
  with Sender as TBaseReport do
  begin
    BitMap := TBitmap.Create;

    try
      Bitmap.LoadFromFile('logo_codegear.bmp');
      PrintBitmapRect(1.0,1.0,2.0,2.0, Bitmap);
    finally
      FreeAndNil(Bitmap);
    end;

    SetFont('Arial',12);
    Bold := True;
    ...
  end

Basicamente o que foi feito ? Foi declarado uma variável do tipo TBitMap, instanciada a variável, carregamos a imagem na mesma, após isso o método PrintBitmapRect foi utilizado passando, o x e y de localização e o x e y de tamanho, poderíamos também utilizar o método PrintBitmap onde ao invés de passar o x e y de tamanho, passaríamos o x e y de escala da imagem.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Jhonas,

Agradeço demasiadamente a atenção dispensada!

Eu tinha um prazo muito curto para apresentar essa aplicação, e tive que apelar para o bom e velho QuickReport.

Porém, o problema do JPG no RAVE me intrigou. Agradeço muito sua ajuda. Vou estudar direito esse código, fazer os testes e postar aqui os resultados.

Agora, uma última pergunta. Qual é a versão do Rave que você utiliza? Se não for a versão que 5.0, que vem com o Delphi 7, como faço para atualizar a minha?

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, uma última pergunta. Qual é a versão do Rave que você utiliza? Se não for a versão 5.0, que vem com o Delphi 7, como faço para atualizar a minha?

Tenho a mesma versão que vem com o delphi 7 .. o ultimo código que te passei funciona nele.

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...