quinta-feira, 12 de março de 2009

Exportar relatórios em Rave Reports para PDF

Quem já não passou por uma experiência onde o cliente solicita que os relatórios sejam exportados do seu sistema em formato PDF? Bom, pode até ser fácil você instalar um impressora PDF na máquina e orientar que ele imprima para o formato, mas, e porque não exportar diretamente o relatório no formato solicitado? Na grande maioria dos geradores de relatórios, esta utilidade está disponível, e no Rave Reports, exportar para PDF é prático e rápido de ser implementado. Vamos montar um pequena estrutura de relatório, e codificar a exportação.

Crie uma nova aplicação Delphi for Win32, e adicione os seguintes componentes:
RvProject (paleta Rave) - Integração com o projeto do relatório
RvSystem (paleta Rave) - Configurações do relatório
RvRenderPDF (paleta Rave) - Exportação do relatório para PDF
ClientDataSet (paleta Data Access) - Importação de XML com dados para o relatório
RvDataSetConnection (paleta Rave) - Ligação do DataSet para exibição dos campos na estrutura do Rave Reports
SaveDialog (paleta Dialogs) - Localizar destino de exportação do relatório
Button (paleta Standard) - altere
Caption para "Exportar para PDF"

Inicialmente, selecione o RvProject e ligue sua propriedade Engine ao componente RvSystem1. Num segundo passo, selecione o ClientDataSet, com o botão direito sobre o mesmo selecione a opção Load from MyBase Table e selecione uma fonte de dados XML (C:\Arquivos de Programas\Arquivos Comuns\Borland Shared\Data\). Também, no componente RvDataSetConnection relacione a propriedade DataSet ao componente ClientDataSet para que a ligação dos dados entre Delphi e Rave Reports seja realizada. Com um duplo clique sobre o RvProject, abra o Rave Design e vamos à criação do arquivo de relatório. Selecionei como fonte de dados o arquivo Country.xml e irei montar um esquema de relatório para exibição de países e capitais. Salve o projeto do rave no mesmo diretório do sistema.
Criado o relatório, retomaremos o Delphi para configuração do RvProject onde iremos incorporar o projeto de relatório. Na propriedade StoreRAV localize o arquivo *.rav criado e em seguida clique em Load. Isso fará com que o relatório seja incorporado ao executável, sem necessidade de que o arquivo seja distribuído junto com a aplicação.

Para codificarmos então a exportação do relatório, adicione o bloco a seguir no evento OnClick do Button onde definimos as configurações do objeto SaveDialog e solicitamos ao usuário que informe um nome e local para que o relatório possa ser salvo. Em seguida, desabilitamos a opção de Preview exibida durante a execução de um relatório, definimos que o mesmo será renderizado para PDF, selecionamos o nome do relatório a ser executado e chamamos a ação.
procedure TForm1.Button1Click(Sender: TObject);
begin
SaveDialog1.Filter := 'Arquivos PDF (*.pdf)|*.pdf';
SaveDialog1.DefaultExt := '*.pdf';
SaveDialog1.Execute;
if SaveDialog1.FileName <> '' then
begin
RvSystem1.SystemSetups := RvSystem1.SystemSetups - [ssAllowSetup];
RvSystem1.DefaultDest := rdFile;
RvSystem1.DoNativeOutput:= false;
RvSystem1.RenderObject:= rvRenderPDF1;
RvProject1.SelectReport('Report1',True);
RvSystem1.OutputFileName:= SaveDialog1.FileName;
rvproject1.Execute;
end;
end;


Ao final do processo, um arquivo PDF será salvo no destino escolhido, pronto para ser enviado por e-mail ou disponibilizado para download em sites Web.
Pela sua leitura muito obrigado, e até o próximo post.

6 comentários:

Unknown disse...

Boa tarde, estou usando delphi .net 2007 e estou com dificuldades de fazer relatórios, não tem nada de componentes, vocë conheçe alguma forma de fazer relatórios no delphi for. net???

atenciosamente

Sergio
serginho.inf@gmail.com

Maikel Scheid disse...

Bom, pra .NET há vários limites nos geradores de relatórios mais conhecidos. De uma pesquisada nos nomes Fast Reports e Crystal Reports, estes geram relatórios par ferramentas .NET.

Att

César disse...

Kra no meu o arquivo nao é criado da uma exceção do tipo: "Cannot create File", estou usando seven será que tem alguma relação? Mas no resto seu exemplo funciona direitinho..

Unknown disse...

cezar tente utilizando modo administrador e/ou compatibilidade com XP (clicando com botão direito no exe)

digitalnet disse...

Amigão, meu campo datamemo do rave report ta ligado a uma tabela feita no access atraves de ADO, mas ta ficando desconfigurado. O que sera isso? Acho que tem alguma coisa a ver com BlobField. Voce me ajudar? melhordebao@gmail.com

Carlos disse...

Companheiro, também tive esse problema com o Rave e o ADO. Encontrei duas maneiras de resolver:
1ª) Na cláusula SQL da Query, use alguma função que converta o memo para string, tipo cstr(NomeDoCampoMemo);
2ª) Crie uma função no evento OnBeforePrint do Databand que contém o campo memo com este código:
var i: integer;
begin
Memo1.text := '';
for i:= 0 to Length(DVNomeDoCampo.AsString) do
if Odd(i) then
Memo1.Text := Memo1.Text + Copy(DVNomeDoCampo.AsString, i,1);
end;
end;


Essa função vai retirar os caracteres inválidos do campo memo, antes de serem enviados para impressão.