Bha, uma das coisas mais importante de qualquer sistema, são os relatórios. Então eu não poderia deixar de falar sobre eles e como gerar PDF através de gráficos do Flex.
Neste exemplo explico como gerar PDF através de um gráfico do Flex, utilizando o HTML2PDF. Uma biblioteca em PHP que utiliza o FPDF. Esta biblioteca tem a vantagem de você poder gerar um código HTML com toda estrutura do PDF e enviar para a biblioteca que o converte. Esta facilidade agregada com a facilidade de gerar gráficos com o Flex, torna este exemplo pequeno e simples de ser aplicado a qualquer outro projeto.
É gerado um gráfico do tipo LineChart, e este gráfico é copiado pela função “copiaJPG()“, codificado em 64 bits pela função encodeImageAsBase64 e enviado por HTTPService como uma string. esta String é recebida pelo PHP, que o decodifica com a função base64_decode, e é salvo com o nome de “img.jpg“.
Abaixo o código da função que captura e envia a imagem e a função que recebe a imagem no servidor:
Arquivo main.mxmlprivate function copiaJPG(source:IBitmapDrawable):void { var ohSnap:ImageSnapshot = ImageSnapshot.captureImage(source, 0, new JPEGEncoder(100.0)); graficoString = ImageSnapshot.encodeImageAsBase64(ohSnap); form1.send(); } ....... <mx:HTTPService id="form1" method="POST" resultFormat="text" result="{AbrirPDF(event.result)}" url="/code/053/br/php/pdf/recebeIMG.php"> <mx:request> <IMG>{graficoString}</IMG> </mx:request> </mx:HTTPService>Arquivo br/php/pdf/recebeIMG.php
$nomeArquivo = str_replace("//", "/", "imagemRel/img.jpg"); if ($setaArquivo = @fopen($nomeArquivo, 'w')) { @fwrite($setaArquivo, base64_decode( $_POST['IMG'])); }
Quando o servidor responde que a imagem esta salva, a função AbrirPDF é invocada, e uma URL é chamada para enviar o PDF para download.
arquivo main.mxmlprivate function AbrirPDF(e:Object):void { navigateToURL(new URLRequest("/code/053/br/php/pdf/geraPDF.php"), "download"); }
O arquivo “br/php/pdf/geraPDF.php“, monta um HTML e envia para a função “WriteHTML” que transforma todo o HTML em PDF.
Abaixo segue arquivo completo.
Para ver o código fonte clique aqui.