Adobe Flex com Relatório em PDF
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="http://code.mxml.com.br/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("http://code.mxml.com.br/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.
Você pode seguir todas as respostas a esta entrada através do RSS 2.0 feed. Você pode deixar um comentário, ou colocar um link em seu site.


Muito obrigado pelo seu esforço em publicar artigos em Flex, nós meros aprendizes agradecemos você.
Obrigado pelo comentário
when i click on download, nothing happens
English
I was called the PDF within an IFRAME, and in this case the brouser was running internally.
Português
Eu estava chamava o PDF dentro de um IFRAME, e neste caso o brouser estava executando internamente.
I tried again and it worked. Great job
Congratulations.
Olá!
Cara, gostaria de saber se caso eu enviasse para o PHP não apenas o componente do gráfico, mas sim o Canvas no qual ele e outros componentes estão inseridos, seria impresso o Canvas e todos os componentes que estiverem dentro dele…
Preciso gerar um PDF e tal, mas meu gráfico sem os dados que estão ao lado não fica tão útil…
Grato!
Na função copiaJPG(source:IBitmapDrawable), você apenas envia o ID do objeto que queres enviar. Pode ser um Canvas inteiro, um DataGrid, uma aplicação inteira, ou qualquer outro outro objeto.
O PHP receberá como imagem, e se precisares mexer em algum item póderás utilizar a biblioteca GD para isto.
Fala Alemão,
Muito obrigado pelo post, foi de grande, imensa utilidade.
Só tenho uma dúvida: quando eu passo o ID de um datagrid, ele corta o resultado, pegando apenas o que está visível e desconsiderando o resto do conteúdo que está escondido na scrollbar.
Isso já era de se esperar pelo nome da função ImageSnapshot.captureImage, ou seja, snapshot.
Eu queria saber se há alguma forma de simplesmente pegar o conteúdo inteiro do datagrid e mandar pro php?
Abçs
Ola Celão
Com relação ao Datagrid, há duas maneiras de trata-lo. A primeira é gerra todo os dados do Datagrid em Tabela.
A segunda, é esticar o datagrid de modo a ficar completamente visível. Neste ponto passar o ID.
Alemão,
Obrigado pela ajuda.
O que fiz, foi tirar essa parte de snapshot e no navigateToUrl eu chamei um php que gerava a tabela em html, gera o pdf e exibe os headers pra download.
Ou seja, fiz tudo pelo php mesmo, achei mais simples.
Abração
[...] Fevereiro 11, 2009 Tava dando uma olhada nuns links de flex e encontrei este post. [...]
Alemão,
Porque quando eu chamo a geraPDF.php ele abre uma janela para download e usando o site http://code.mxml.com.br/…. ele abre na propria janela?
@Ronaldo Em ambos ele abre em nova janela.
Olá Alemão! Cara, primeiro gostaria de lhe parabenizar pelo site que está sendo de grande utilidade para nós que tentamos fazer alguma coisa em Flex. Preciso de um e-mail seu para contato direto. Obrigado.
Show de bola… Agora em jsp vc pode dar uma dica como ficaria???
Valeu cara..
Tem algum exemplo de impressão usando o .NET
Obrigado.
Para .NEt só pagos.
http://www.google.com.br/search?q=htmltopdf+.net
Desculpa, me expressei errado.
No .net estamos usando o CristalReport para gerar relatórios e usamos o Flex para parte visual do projeto.
Existe um comando do CristalReport que exporta em stream o relatório PDF, só que agora eu preciso pegar essa stream do .net e jogar para o flex, para o cliente ter a opção de visualizar ou salvar o pdf.
A minha restrição é que eu não posso gravar o pdf no servidor.
O que me indicam?
@Iron Tem que ver se a ferramenta possui este recurso.
Olá, você saberia me dizer se é possível imprimir em impressora matricial pelo Flex ? Estou tetando mas com pau as impressões..
@depende muito de como estas fazendo! Se estas gerando PDF deves o fazer com as margens da impressora.
Amigo, você sabe se teria como eu fazer isso com o Java?
Preciso salvar a Snapshot de um grafico e enviar pro java salvar ela, mas n sei como fazer isso!
Sim, no server apenas crie uma classe que recebe e salva.
Entao chapa, eu fiz aqui tudo pah, mas o problema é: Na hora que o flex manda o ByteArray para o Java receber como byte[], ele vem um valor muito estranho!
Acho que o problema esta quando o flex converte essa img em String pra mandar pro java.
[...] http://www.axiis.org/examples/HClusterColumnExample.html http://blog.mxml.com.br/adobe-flex-com-relatorio-em-pdf [...]