Olá Pessoal, tudo bom? Como vão vocês?
Em 2011 quero começar com um artigo ensinando uma dúvida muito frequente aos usuários de hospedagem da Integrator Host: embeber as fontes desktop no relatório JasperReports para serem usadas no aplicativo Web.
No geral, relatórios são criados no desktop, onde usamos uma ferramenta visual, arrastando, modificando e, claro, gerando uma aparência agradável. Se a aparência então for feita por um Designer, este pouco se importa onde vai ser gerado tal relatório, o importante é o VISUAL. É neste momento que começa o problema.
Um relatório pode usar fontes desktop que não estão disponíveis no servidor online. Pior, se o seu aplicativo roda em um servidor compartilhado, raramente uma empresa de hospedagem vai ficar instalando suas fontes desktop na máquina servidora, toda vez que você estiver com um relatório “enfeitadinho”. Se instalar, também não será na hora. O que fazer neste caso então? Como obter independência?
Pensando nesta questão, a equipe de desenvolvimento do JasperReports incluiu a capacidade de adicionar as fontes desktop em seu aplicativo, para que estejam disponíveis quando aquele seu belo relatório for gerado para o cliente.
O que veremos neste artigo é como executar tal tarefa, partindo de um relatório já gerado no iReport.
Para acompanhar este artigo
Criei um banco de dados simples, com uma tabela chamada produtos, contendo os campos selecionados como mostra a Figura 1.
O relatório foi criado usando o assistente do iReport 4, onde o resultado final, após minhas pequenas alterações, é o que mostra a Figura 2.
Tenham em mente que este artigo não vai ensiná-los a criar relatórios e sim como contornar um problema comum entre os desenvolvedores Java. Caso queiram dominar a arte de desenvolver relatórios JasperReports com o iReport, vejam a minha seção de livros clicando aqui.
Trabalhando com fontes personalizadas no relatório
Após desenhar o relatório, chega o momento de finalizar a “arte” com alguns toques e, em meio as mudanças, eis que surge a ideia de personalizar a fonte também do texto contido no relatório.
No exemplo que fiz, os textos fixos foram todos personalizados com uma fonte que possuo em minha máquina, chamada Impact.
Embora esta fonte seja importante para o design do meu relatório, não tenho garantias que ela exista no servidor onde hospedo meus aplicativos. Logo, o que parece simples, pode se tornar um pesadelo se não for eu o responsável pela administração do sistema operacional.
Adicionando a fonte ao aplicativo
Graças ao problema de ausência de fontes em servidores de hospedagem, muitos desenvolvedores não podiam depender da empresa ou administrador que fornece a máquina onde disponibilizam se encontram aplicativos, principalmente quando se trata de uma hospedagem compartilhada. É nisto que o JasperReports inclui a possibilidade de ter todas as fontes que usou em seu relatório em produção.
Adicionando e exportando a fonte no iReport
Vá no menu Tools >Options (menu iReport>Preferences no Mac OS X) e, na janela Options, em iReport, selecionem a aba Fonts.
Através do botão Install Font selecionamos as fontes que desejamos importar no iReport. Depois de importadas, podemos selecionar todas elas e exportá-las através do botão Export as extension.
No exemplo que explico, chamei o arquivo que exportei de font.jar. É justamente este arquivo que vou adicionar em meu projeto.
A fonte como uma biblioteca no seu aplicativo Web pelo Eclipse IDE
No Eclipse, basta clicar com o direito do mouse sobre o projeto, selecionar o item Properties. Na caixa de diálogo Properties, vamos em Java Build Path, na aba Libraries. Para adicionarmos a biblioteca font.jar, vamos no botão Add External JARs.
Claro que eu não poderia deixar de comentar uma particularidade do Eclipse IDE na versão Helios. Para projetos Java EE. Nesta versão, temos um item de nome diferente para adicionarmos as bibliotecas do projeto no aplicativo Web. Este item está na janela Properties, em Deployment Assembly. É neste local que determinamos quais bibliotecas serão exportadas ao executarmos o servidor Java.
Ao clicarmos no botão Add, a caixa de diálogo New Assembly Directive surge. Esta caixa de diálogo é a responsável por selecionarmos as bibliotecas do projeto em Java Build Path Entries.
Ao clicarmos em Next, veremos todas as bibliotecas que dispomos em Java Build Path. Selecionem todas – as bibliotecas para executar o relatório JasperReports devem estar presentes – finalizando no botão Finish.
Retornando ao diálogo Properties, no item Deployment Assembly, temos todas as bibliotecas que serão adicionadas ao diretório lib do projeto, incluindo font.jar.
A fonte como uma biblioteca no seu aplicativo Web pelo NetBeans IDE
No NetBeans IDE, basta adicionar em Libraries, clicando com o direito do mouse e selecionando, no menu de contexto, o item Add JAR / Folder.
Antes e depois da fonte adicionada ao projeto
Para satisfazer a curiosidade do que será visto, temos a Figura 11 que mostra um relatório gerado, em formato PDF, sem a fonte no diretório lib do projeto. Note a diferença com a Figura 12 em relação ao formato da fonte, principalmente do título “Produtos”.
O projeto para download
Clique aqui para baixar o projeto e alterá-lo como desejar.
março 18th, 2011 11:10
Você manda muito bem!!! Peguei muitas ajudas em seu site!
Obrigado!
julho 29th, 2011 17:47
Edson, parabéns! Otímo seu artigo, meu ajudou muito.
agosto 4th, 2011 23:46
Edson, sem comentários a sua iniciativa..parabéns
novembro 23rd, 2011 10:47
Congrats brah..
very helpful
fevereiro 16th, 2012 10:55
segui os passos informados e quando incluo o jar exportado ocorre a seguinte erro :
Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser
o jar do jasperReport está incluido.
fevereiro 16th, 2012 12:03
@Tenclar,
Duas situações precisam ser vistas: JAR faltando ou JAR de versões diferentes em um mesmo projeto.
julho 3rd, 2012 12:03
Amigo falto você colocar ai o banco pra gente ne…poderia fazer esse favor ai? Flw’s!
setembro 4th, 2012 11:48
Estou com problema na hora de exportar para o PDF, já fiz todo esse procedimento! Porém o texto continua sendo cortado em algumas partes… alguém já passou por isso?
setembro 15th, 2012 9:54
Este post me ajudou muito no meu trabalho de conclusão de curso, obrigado!
julho 9th, 2014 23:47
Ola Edson tudo blz?
Sabe me dizer se tem como passar um array por sessao no Spring MVC ?
agosto 22nd, 2014 11:32
Olá Edson,
Gostaria de parabenizá-lo pelos artigos e pelos livros. Boa parte do que aprendi em java para web foi consultando suas publicações e teus livros. Você tem uma maneira simples de escrever sobre vários temas no desenvolvimento java.
Continue sempre assim.
agosto 3rd, 2015 12:06
Cara esse post me ajudou de mais, valeu mesmo pela ajuda!
novembro 26th, 2015 22:02
Olá, é estou usando maven. Funciona igualmente?