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
July 9th, 2008 at 6:50 pm
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?
August 2nd, 2008 at 7:57 pm
It’s amazing
September 2nd, 2008 at 11:46 am
Bem bacana esse exemplo, queria saber se você pode disponibilizar o código completo da aplicação, é possível?
September 5th, 2008 at 10:42 am
Código??
October 15th, 2008 at 11:33 am
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?
January 20th, 2009 at 4:35 pm
Estou desenvolvendo um sistema em php, saberias me dizer como faço pra gerar um relatorio.
March 24th, 2009 at 11:29 pm
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
February 19th, 2010 at 1:57 pm
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.
February 19th, 2010 at 1:58 pm
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”);
July 29th, 2010 at 4:01 pm
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]