Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Jasper ireports + Javascript

É possível a emissão de relatório via Javascript?

9 respostas

No lado do cliente não. O browser não pode acessar filesystem. Seu server gera e seu browser faz download.

Mas se você não quer cuspir pdf pode usar html e css simplesmente. Faço isso direto.

No css você usa o media type print e ajusta a página no monento da impressão, focando o conteúdo importante.

Para ficar mais clara a dica, é algo assim:

Na sua página você importa o CSS com o estilo da página (estou supondo que você sabe o mínimo de CSS, OK?):

<link rel="stylesheet" href="estilos.css">

Se formos imprimir uma página, pode sair com cabeçalho, rodapé e algumas imagens que não queremos.

Então, você pode criar um arquivo chamado "impressao.css" que só será carregando quando você mandar para a impressora. Nele, você pode usar seus conhecimentos de CSS para ocultar o cabeçalho, rodapé e algumas imagens que não fazem sentido serem impressas.

Para ele carregar esse CSS só quando for imprimir você faz:

<link rel="stylesheet" href="estilos.css">
<link rel="stylesheet" href="impressao.css" media="print">

Então, o HTML é ajustado no momento da impressão.

Oi Flavio,

Primeiramente obrigado pelos ótimos cursos de javascript .

  • Eu, quando faço a geração de relatórios no Java eu passo parâmetros e e chamo o layout feito no iReport através do meu controller e emito um relatório em pdf(Exemplo no java).

  • Pelo o que eu entendi na sua explicação é possível realizar a criação de um relatório com HTML e CSS,correto?, existe algum curso aqui no Alura que me passe uma base desse processo?

  • Voltando para a parte de javascript no lado do servidor, é possível fazer o mesmo processo que citei como exemplo no primeiro tópico ,com nodeJS?

Obrigado :)

solução!

No lado do navegador, existe uma bibliteca chamada D3 (https://d3js.org/) para geração de gráficos. Já relatório essa solução que lhe dei é padrão.

Agora, sobre um relatório gerado em Java, o procedimento é o mesmo que você já conhece. Se você gerou o relatório com Java, para que seu navegador baixe o relatório, ele precisa saber da URL do relatório gerada.

Agora, para gerar relatório com Node.js no lado do servidor, PDF e tals, há vários módulos que fazem isso.

Há quem também use o PhantomJS que é um browser sem visual que roda no servidor e seu servidor utiliza esse cara para processar o HTML e exportar para PDF no próprio server antes de devolvê-lo. São muitas as possibilidades.

Tem até um post sobre isso: http://stackoverflow.com/questions/14552112/html-to-pdf-with-node-js

No entanto, se não é problema para você fazer o relatório em HTML e CSS e usar a estratégia que lhe falei deixando para que o usuário exporte o relatório em PDF, vai ser algo mais fácil.

Sobre gerar relatório em HTML e CSS, não há curso que foque em relatório. Há cursos que ensinam HTML e CSS e com base na dica que lhe disse você pode gerar os relatórios. O que seu server fará é gerar a página dinamicamente com os dados do relatório. Algo que você já faz com Ireport, só que no lugar de gerar um PDF, você devolve uma página HTML.

Muito bom !! Vlw Flavio pela dica vou por em pratica.

Grato.

Veja, o phantomjs no server é uma mão na roda para quem domina HTML e CSS, podendo gerar PDF's usando tecnologias da Web. Já o IReport é exclusivo de ma linguagem e tal.

Sim, estou olhando nesse momento, muito legal, não sabia da existência dele.

Também encontrei um cara chamado jsPDF.

HTML:

<div id="conteudo">
     <h3>Olá, esta é uma tag H3</h3>

    <p>Um parágrafo.</p>
</div>
<div id="editor"></div>
<button id="btGerarPDF">gerar PDF</button>

JavaScript (JQuery)

var doc = new jsPDF();
var specialElementHandlers = {
    '#editor': function (element, renderer) {
        return true;
    }
};

$('#btGerarPDF').click(function () {
    doc.fromHTML($('#conteudo').html(), 15, 15, {
        'width': 170,
            'elementHandlers': specialElementHandlers
    });
    doc.save('exemplo-pdf.pdf');
});

https://parall.ax/products/jspdf/doc/symbols/jspdf.html