Edson Gonçalves » jasperreports
Gerando relatórios JasperReports na Web com Fontes embebidas
Category: iReport,JasperReports — Edson Gonçalves @ 5:43
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.
Figura 1 – A tabela usada
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.
Figura 2 – Relatório gerado pelo assistente com pequenas modificações
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.
Figura 3 – A fonte escolhida para o texto estático Produtos do relatório
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.
Figura 4 – A fonte escolhida e usada no relatório pronta para ser exportada
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.
Figura 5 – O JAR font.jar adicionado nas bibliotecas do meu projeto
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.
Figura 6 – Adicionando os arquivos JARs do projeto no aplicativo Web
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.
Figura 7 – Obtendo os arquivos JARs de Java Build Path
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.
Figura 8 – Arquivos JARs selecionados
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.
Figura 9 – As bibliotecas que serão exportadas para o diretório /lib do projeto Web
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.
Figura 10 – As bibliotecas que serão exportadas para o diretório /lib do projeto Web
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".