Criando PDF via jasper
Para criação de PDFs em aplicações Web recomendo o Jasper, já que sua comunidade é extensa e possui diversos recursos. Neste post usaremos o Back-End java.
Vamos começar abrindo o IReport para criar um template que será chamado no serviço.
Após a criação do novo template, salvar o arquivo exemplo.jrxml na pasta resources da aplicação.
Agora iremos abrir o template em branco, entrar em preferences e alterar a language para java:
Ao criar os fields que irão receber os valores enviados pela aplicação java, devemos estar atentos para manter os nomes dos fields iguais aos do Objeto no java. Alterar também o tipo do field, se necessário. (nesse caso o listReports é um List):
A partir desse momento, podemos criar o template somente arrastando os fields. Lembrando que a paginada é subdividida em várias partes, como Title, Last Page Footer (aparecerá somente na última página), e deve ser usado de acordo com a necessidade de cada caso. Neste exemplo, usaremos o Title e Deatail 1:
Para inserir a lista no Pdf, devemos criar um Subreport encontrado na Palette:
Arraste o subreport para o Detail 1, e assim, como o arquivo exemplo.jxml, crie o subExemplo.jxml na pasta resource da aplicação. E lembre-se de manter os nomes dos arquivos iguais ao que foi usado na aplicação java. Por estar sendo usado via serviços lidando com List de Java teremos que alterar o XML, assim, independentemente de onde a aplicação estiver rodando, o path do arquivo de subreport sempre estará fixo. Dentro da tag subreport alterar dessa forma:
Após os ajustes do arquivo exemplo.jxml, deve-se buidar esse arquivo para criar o arquivo .jasper. Para fazer isso, basta clicar no botão com um martelo:
Para finalizar: Somente criamos o template do subreport com os fields referentes.
Back-End:
Iniciaremos baixando as dependências .jar na aplicação:
- Para baixar os .jar, acesse: http://community.jaspersoft.com/project/jasperreports-library/releases
- Para baixar via maven, use a dependência:
Para desenvolver o Template do PDF, usar o IReport Designer:
http://community.jaspersoft.com/project/ireport-designer/releases
Desenvolvendo:
Irei criar um serviço para expor em uma nova aba o PDF, porém, o Jasper não se limita somente a essa função. Pode-se também criar o arquivo para download direto ou armazenar o File para envio por e-mail e outros.
Neste exemplo, vamos utilizar as Annotation do Spring-Boot. Para mais informações acesse:https://projects.spring.io/spring-boot/
Classe de Controller:
Classe ObjetoReport:
Classe ListReport:
Na API do sistema que irá ter o PDF, faremos a construção dos valores vindos de serviços os mockados, para depois transformá-los de arquivo jasper em um FILE. Após montar os Objetos com os valores que estarão no PDF, chame o serviço e teremos esse PDF.
PDF criado nesse POST: exemplo
Agradeço a todos e qualquer dúvida postem nos comentários.