segunda-feira, 2 de abril de 2012

(PARTE 1) Gerar PDF e enviá-lo por E-mail no Delphi 7: Gerar PDF a partir do Quick Report utilizando ExportQR


Veja neste artigo como gerar um documento PDF no Delphi 7 a partir de um relatório Quick Report, utilizando o componente ExportQR, e em seguida enviá-lo automaticamente por e-mail.

Neste posto abordarei a 1ª parte do tutorial, explicando como se gera o PDF. Na parte 2 ((PARTE 2) Gerar PDF e enviá-lo por E-mail no Delphi 7: Enviar automaticamente por E-mail um PDF gerado pelo Delphi 7) explico como enviar automaticamente um PDF gerado pelo Delphi.



Venho por meio deste artigo solucionar um grande problema que enfrentei quando tentei gerar arquivos do tipo PDF a partir do Delphi 7, mais especificamente do Quick Report.


Primeiramente você deve fazer o download do componente ExportQR em um dos seguintes links:

Após fazer o download, descompacte em algum diretório e abra o
arquivo ExPackD7.dpk (note que o componente também possui
versão para o Delphi 6).

Como este tutorial visa utilizar o ExportQR em conjunto com o Quick
Report, abra o arquivo ExportPack.pas e comente a linha onde está a
diretiva para o FastReport:


 unit ExportPack;  
 {$DEFINE QUICKREPORT}  
 {$DEFINE FASTREPORT} // comente essa linha  
 {$DEFINE SPANISH}  

Após isso, clique no botão Install para instalar o componente e a paleta
ZASOFT será criada no seu Delphi, com o bendito componente
ExportQR. Não esqueça de adicionar o diretório no Library Path do
Delphi, caso não tenha sido feito automaticamente na instalação do
componente (Tools > Environment Options > Library > Library Path).

Gerando PDF a partir do Quick Report

Agora que o componente está devidamente instalado, vamos a parte que
mais interessa. O tutorial vai se basear em um novo projeto criado
somente para demonstrar a geração do PDF.

Crie um novo projeto no Delphi e adicione no Form1 o componente
ExportQR, um BitBtn e um Edit (esse Edit servirá para informar o
diretório que você irá exportar o arquivo PDF).

Após isso, adicione ao projeto um relatório que será nossa impressão
(File > New > Other > Business > QuickReport Wizard). Deixe ambos
os formulários sendo criados em tempo de execução no projeto (ou
seja, eles tem que ficar em Auto-create forms na opção Project >
Options > Forms. Não esqueça de deixar o Form1 acima na
preferência do Auto-create forms.

Neste caso vou deixar o relatório (Form2) em branco, pois o objetivo
é apenas demonstrar como transformá-lo em PDF e não propriamente
explorar as propriedades do Quick Report.

Volte ao formulário principal (Form1) e adicione a Unit do relatório,
através do menu File > Use Unit...

Neste exemplo, pode- se colocar o seguinte texto na propriedade Text do
Edit1 para informar onde será salvo o arquivo PDF:

 Edit1.Text := 'C:\testePDF\testePDF'  

Dê dois cliques no BitBtn criado anteriormente e na ação do botão digite
o seguinte:


 procedure TForm1.BitBtn1Click(Sender: TObject);  
 begin  
  if (Edit1.Text = '') then  
  begin  
   MessageDlg('Especifique um local para a '+  
         'exportação !', mtError, [mbOK], 0);  
   Edit1.SetFocus;  
   Exit;  
  end  
  else  
  begin  
   Form2.QuickRep1.Prepare;  
   ExportQR1.Report := Form2.QuickRep1;  
   ExportQR1.ExportQRPDF(Edit1.Text, False);  
  end;  
 end;  


Agora basta rodar a aplicação, informar um diretório válido no text do
Edit e usar a criatividade para solucionar o problema de sua empresa.

Após concluir esses passos, passe para a Parte 2 deste tutorial, que visa
enviar o PDF gerado automaticamente por E-mail:
(PARTE 2) Gerar PDF e enviá-lo por E-mail no Delphi 7: Enviar automaticamente por E-mail um PDF gerado pelo Delphi 7.

Conclusões

Notamos neste artigo a facilidade de geração de arquivos PDF pelo
Delphi 7 e o quanto isso nos pode ser útil no dia-a-dia. No
próximo artigo mostrarei como encaixar automaticamente esse
arquivo PDF gerado em uma rotina de envio de e-mail. Forte
abraço e até o próximo tutorial.

--

27 comentários:

  1. Como posso utilizar esse método como um relatório já pronto?
    Tipo, tenho um relatório de cliente(RelClienteDetalhado), como posso salvalo em PDF?

    ResponderExcluir
    Respostas
    1. Antonio, como eu citei no exemplo, caso tu já tenhas um relatório criado, basta no evento click do Botão passar o comando:

      procedure TForm1.BitBtn1Click(Sender: TObject);
      begin
      if (Edit1.Text = '') then
      begin
      MessageDlg('Especifique um local para a '+
      'exportação !', mtError, [mbOK], 0);
      Edit1.SetFocus;
      Exit;
      end
      else
      begin
      RelClienteDetalhado.QuickRep1.Prepare;
      ExportQR1.Report := RelClienteDetalhado.QuickRep1;
      ExportQR1.ExportQRPDF(Edit1.Text, False);
      end;
      end;

      Excluir
  2. Olá, gostei muito do seu tutorial, porém uma coisa me incomoda sobre o PDF gerado. Hoje utilizo o PDF_Creator, com a função de salvamento automatico. O componente que voce demonstrou é infinitamente mais rapido, facil e pratico, mas a qualidade do PDF gerado deixa a desejar. Saberia como aumentar a qualidade do arquivo gerado ?

    ResponderExcluir
    Respostas
    1. Amigo pra te falar a verdade comigo atendeu bem essa questão da qualidade do pdf gerado, nossos clientes ficaram satisfeitos com a solução.

      Excluir
  3. Cara, muito obrigado pela dica. Deixa só eu fazer uma observação que talvez possa ajudar algumas pessoas, caso tenham o mesmo problema que o meu. No meu caso, fui instalar para o Delphi 6, que poussi a versão 3.0.9 do QuickReport. Ela não funcionou. Eu usei então a dpk do D7, desabilitei as linhas pedidas aqui no artigo, desabilitei uma última que pedia e funcionou perfeitamente. A qualidade do PDF não é grande, mas é satisfatória. Obrigado novamente!

    ResponderExcluir
    Respostas
    1. Obrigado pela disca Nysp, realmente não tinha testado o componente no Delphi 6. Abraço.

      Excluir
  4. É, eu tentei utilizar o componente, a dica e o funcionamento dele são realmente legais, mas a qualidade deixa muito a desejar. Achei que poderia aumentar a fonte das letras de alguns relatórios mas nem isso ajuda, infelizmente. Ele possui uma propriedade chamada PixelFormat, que não faz diferença alguma se deixa com 1bit ou 32 bits, acho que ela não fora desenvolvida pois, possivelmente, seria a que melhoraria a qualidade dos PDFs criados.

    ResponderExcluir
    Respostas
    1. Pois é Nysp, aqui não tive problemas quanto à qualidade do pdf gerado, visto que atendeu bem nossos clientes até o momento. Obrigado pela observação.

      Excluir
    2. nessa parte do código
      ExportQR1.Report := Form2.QuickRep1;
      ExportQR1.ExportQRPDF(Edit1.Text, False);

      experiementa nesse último ativar a compactação, mudar para True

      Excluir
    3. Boa dica Marcelo, realmente muita gente reclamou da qualidade do PDF gerado. Amanhã na empresa vou testar a mudança mudando o parâmetro para True.

      Excluir
  5. Cara muito interessante sua dica, tempos atrás necessitei fazer a geração em PDF a partir do QuickReport, atualmente uso a versão 4.0. Mas, infelizmente ele não exporta com as linhas de grade ou imagens, somente os textos. teste seu exemplo e acontece o mesmo. Alguma dica?

    ResponderExcluir
    Respostas
    1. Amigo, implementei essa solução de gerar PDF de documentos em um aplicativo de Ordem de serviço aqui na empresa e funciona completo sim, inclusive com impressão das grades e imagens.

      Utilizo o próprio Quick Report que vem na instalação do Delphi 7 (C:\Program Files (x86)\Borland\Delphi7\Bin\dclqrt70.bpl).

      Qualquer dúvida estamos ai para tentar ajudar.

      Abraço.

      Excluir
  6. Bom dia estou correndo atrás disso a muito tempo.....Como faço para inserir um documento pdf em um banco de dados paradox?

    ResponderExcluir
    Respostas
    1. Fabio, nunca utilizei o Paradox, porém no Firebird o campo que salva arquivos binários é o "BLOB".

      Acredito que no Paradox o tipo de dados que salvaria PDF seja o "Binary".

      Outra possibilidade seria tu salvares os arquivos PDF no servidor e no banco de dados apenas gravar os caminhos para acessar os arquivos.

      Excluir
  7. Excelente a dica cara, estava penando aqui. Só uma ressalva, segui o tutorial e a qualidade também ficou péssima.
    No meu caso resolveu ativando a compactação
    ExportQR1.Report := Form2.QuickRep1;
    ExportQR1.ExportQRPDF(Edit1.Text, True);

    ao invés de:

    ExportQR1.Report := Form2.QuickRep1;
    ExportQR1.ExportQRPDF(Edit1.Text, False);

    ResponderExcluir
    Respostas
    1. Que bom que o post te ajudou Marcelo, e novamente obrigado pela dica do parâmetro.

      Excluir
  8. Este comentário foi removido pelo autor.

    ResponderExcluir
  9. Otimo seu post ajuda muito e bem detalhado, vc pode me dar uma dica de como posso imprimir uma nota de um cliente, eu preciso que quando eu selecionar o cliente e digitar os produtos comprados ao clica em "Concluir venda" o sistema me imprima somente a nota dele entende?
    dai pensei na seguinte solucao de quando clicar nesse botao ele gravar a nota no relatorio e na sequencia da a opcao de imprimi-la e para isso eu mandar imprimir sempre a ultima pagina que no caso vai ser a ultima nota gerada
    eu uso delphi 2010 e quickreport e firebird se puder me ajudar ficarei muito grato Abraço...

    ResponderExcluir
    Respostas
    1. Bom dia Fabio.

      Ao concluir a venda do cliente, tu ainda terás na memória os dados da query principal da venda, então podes usar este mesmo TSQLQuery/ClientDataSet para gerar o relatório no QuickReport.

      Outra solução seria tu finalizares a venda salvando no banco de dados, e na sequência gerar a impressão a partir de uma pesquisa na tabela de vendas pelo último registro inserido.

      Excluir
  10. Amigos está disponível a Parte 2 do Tutorial:

    http://delphicomtorrada.blogspot.com.br/2014/09/gerar-pdf-no-delphi-7-partir-do-quick.html

    Utilizem este PDF gerado como anexo em um E-mail a ser enviado automaticamente.

    ResponderExcluir
  11. Olá Renato

    Estou tentando instalar o componente no delphi 6 mas quando compilo dá o erro:
    [Fatal Error] ExPackD6.dpk(33): Required package 'qrpt60' not found

    Tentei instalar a versão 7 tb não deu certo

    Alguém pode me ajudar?

    ResponderExcluir
    Respostas
    1. Olá Tatiane.

      Infelizmente só instalei no Delphi 7, então nem tenho como te ajudar sobre o Delphi 6. Desculpe.

      Excluir
  12. ao rodar aparece a mensagem (tprogressbar property out of range). sera que atualizando a versão do QR resolve, o meu é delphi 7 e QR 3,09

    ResponderExcluir
  13. Muito obrigado você me ajudou muito , já tinha tentado varias coisas mas não estava conseguindo funcionou com sucesso. Obrigado

    ResponderExcluir
    Respostas
    1. Que bom que conseguiste Naruto, também bati muita cabeça na época tentando gerar tal PDF.

      Excluir