Relatórios em PDF usando PHP e Flex

Flex Add comentario

Olá amigos,

Nesse post vou mostrar como faço meus relatórios em PHP e consigo acessar através do Flex, bem estou levando em consideração que você conheça a classe FPDF, que pode ser baixada clicando aqui, e também conheça o AMFPHP que é responsável pela conexão entre Flex e PHP que pode ser baixado clicando aqui, e que você já tenha uma conexão com algum banco de dados, neste exemplo vou usar o MySQL.

Então vamos criar o arquivo reports.php e digitar o código em PHP:

<?php
require_once("pdf.php");
 
class reports {
   function reports() {
      mysql_connect("localhost","root","senha");
      mysql_select_db("meubanco");
      session_start();
   }
 
  function meuRelatorio() {
      $sql = "select * from clientes order by nome";
 
      $pdf = new PDF('L'); 
 
      $pdf->SetName("Listagem dos clientes");
      $pdf->Open();
      $pdf->AddPage();
      $pdf->SetFont('Arial', 'B', 8);
      $pdf->Cell(10, 5, "Id", 0, 0);
      $pdf->Cell(50, 5, "Nome", 0, 0);
      $pdf->SetX(-10);
      $pdf->line(10, 25, $pdf->GetX(), 25);
      $pdf->SetXY(10, 27);
      $pdf->SetFont('Arial', '', 8); 	 		
 
      $ds = mysql_query($sql);
      while ($rs = mysql_fetch_object($ds)) {
 
         $pdf->Cell(10, 5, $rs->ID_CLIENTE, 0, 0);
         $pdf->Cell(50, 5, $rs->NOME, 0, 1);
      }
 
      $arquivo = "tmp/relatorio_".session_id().".pdf";
 
      $pdf->Output( $arquivo,'F' );
 
      return $arquivo;
   }
}

Até aí o fizemos é o seguinte, conectamos ao banco, montamos o relatório em pdf, gravamos o arquivo com um nome temporário usando a session_id, e retornamos o nome do arquivo para o flex, ok?

Agora vamos ao Flex, faremos uma aplicação simples apenas com um botão para chamar o metodo “meuRelatorio” e abrir o PDF em outra janela, então vamos lá.

Para manter uma conexão com o PHP eu uso um package que nomeio de ConexaoRemota, então crie um arquivo chamado ConexaoRemota.as com o seguinte conteúdo:

package
{
        import flash.net.NetConnection;
        import flash.net.ObjectEncoding;
        import flash.events.SecurityErrorEvent;
 
        public class ConexaoRemota extends NetConnection {
               public function ConexaoRemota(strURL:String) {
                     objectEncoding = ObjectEncoding.AMF0;
 
                     if(strURL)
                     	connect(strURL);
               }
        }
 
}

Agora inicie uma nova aplicação no Flex, e digite o seguinte código:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
	<mx:Script>
		<![CDATA[
		]]>
	</mx:Script>
 
	<mx:Button x="26" y="25" label="Visualizar relatório" click="abrePDF()"/>
 
</mx:Application>

Na Tag script digite o seguinte código:

import mx.controls.Alert;
 
public var gateway:ConexaoRemota;
 
private function initApp():void {
	gateway = new ConexaoRemota("http://127.0.0.1/relatorios/amfphp/gateway.php");  // caminho do arquivo gateway.php do AMFPHP
}
 
private function abrePDF():void {
	gateway.call("reports.meuRelatorio",new Responder(onResultPDF,onFaultAmf));  // chama o método meuRelatorio lá do arquivo reports.php
}
 
private function onFaultAmf(result:*):void {
	Alert.show("Erro no processamento!");
}
 
private function onResultPDF(result:*):void {
	var file:FileReference;
	var urlString:String = "http://127.0.0.1/relatorios/amfphp/services/"+result;  // local que criou o arquivo PDF
	var request:URLRequest = new URLRequest(urlString);
 
	navigateToURL(request,"_blank");	// abre o PDF em outra janela
}

Pronto! basta rodar sua aplicação e vê se funciona rsss, bem espero que tenha ficado claro pra vocês, abaixo você encontra a aplicação rodando para testar.

Espero ver os comentários de vocês sobre este post.

Abraços,

Ricardo Cerqueira

10 Responses to “Relatórios em PDF usando PHP e Flex”

  1. Bruno Frank Says:

    Me parece que a Adobe também tem uma paradinha pra gerar relatórios usando flex, alguém ai sabe o nome? como faço pra entrar em contato com o administrador desse site?

  2. Tattekef Says:

    It’s amazing

  3. Carro Says:

    Bem bacana esse exemplo, queria saber se você pode disponibilizar o código completo da aplicação, é possível?

  4. calraiden Says:

    Código??

  5. Durlo Says:

    sabe me dizer se tem uma maneira mas fácil de criar o layout do relatório?

    notei pelo seu código que vc faz manualmente o layout apontando coordenadas, sabe me dizer se tem uma maneira mais fácil?

  6. Fabricio Says:

    Estou desenvolvendo um sistema em php, saberias me dizer como faço pra gerar um relatorio.

  7. wallace Says:

    olá,
    tentei visualizar o relatorio criado.. e dá um erro, como a seguir:
    The requested URL /livedemo/amfphp/services/tmp/relatorio_990ddd15ad90c0672e09b55600df0d6a.pdf was not found on this server.

    Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request

  8. Bruno Says:

    Na parte do flex, tudo que fiz foi isso:

    E no php, apenas criei o pdf como fpdf, não criei nenhuma classe, nem nada a mais.

    Funcionou perfeitamente.

  9. Bruno Says:

    na parte do flex apenas um botão e no click do botão

    var request:URLRequest = new URLRequest(”http://localhost/script_do_relatorio.php”);

    navigateToURL(request,”_blank”);

  10. Eberton Says:

    no meu aqui da este erro:

    erro:
    TypeError: Error #1009: Não é possível acessar uma propriedade ou um método de uma referência de objeto nula.
    at relatorio/abrePDF()[C:\wamp\www\relatorios\src\relatorio.mxml:15]
    at relatorio/___relatorio_Button1_click()[C:\wamp\www\relatorios\src\relatorio.mxml:34]

Leave a Reply

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in