Se você está recebendo o seguinte erro: net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'Arial' is not available to the JVM. See the Javadoc for more details.
ou tendo erros similares com fontes no jasper uma alternativa é utilizar as fontes que os seus relatórios dependem como jars no servidor.
Para fazer isso, utilize o iReports para gerar um jar com a fonte que se deseja utilizar. No exemplo abaixo consideramos o export da fonte Arial num ambiente Windows 7 com o iReport 3.7.0.
No menu selecione -> Ferramentas -> Opções. Nas abas selecione Fonts. Se na lista de fontes não constar a fonte que você deseja exportar selecione "Install Font" conforme figura abaixo:
Na janela a seguir indique os demais arquivos que compõem a fonte
Pressione Finalizar/Finish para incluir a fonte Arial na lista de fontes do jasper.
Uma vez que a fonte está disponível na listagem, agora é possível clicar em "Export as extension". Selecione o local e a extensão que deseja e pressione Salvar.
Para não necessitar incluir este jar dentro de todas as minhas aplicações ou incluir esta dependência em meus projetos uma alternativa é configurar um modulo global para que todos os módulos tenham acesso a este recurso.
Inicialmente configure um novo modulo no jboss, como sugestão segue a estrutura abaixo:
Aqui o conteúdo do arquivo module.xml
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="net.sf.jasperreports.fonts"> <resources> <resource-root path="Arial.jar"/> </resources> <dependencies> </dependencies> </module>
Agora é necessário configurar o arquivo standalone.xml ou domain.xml (para o domain é necessário observar qual o profile escolhido para incluir corretamente) dentro do subsystem urn:jboss:domain:ee:1.1 conforme abaixo.
<subsystem xmlns="urn:jboss:domain:ee:1.1"> <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement> <jboss-descriptor-property-replacement>true</jboss-descriptor-property-replacement> <global-modules> <module name="net.sf.jasperreports.fonts"/> </global-modules> </subsystem>
Pronto. Basta reiniciar seu servidor/servidores que agora o jar contendo a fonte Arial estará disponível para o jasper utilizar nos seus relatórios. Existem casos em que é possível solucionar este problema instalando algumas fontes da microsoft direto na distribuição linux, um exemplo é o seguinte pacote para o Debian squeeze :
sudo apt-get install --reinstall ttf-mscorefonts-installer
ou
yum install cabextract xorg-x11-font-utils rpm -ivh https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.2-1.noarch.rpm
para CentOS.
O ideal seria utilizar as fontes adaptáveis (assunto para outro tópico) pois estas se adequam as fontes locais dos sistemas. Também é possível ignorar este erro adicionando a seguinte linha ao arquivo .properties do relatório net.sf.jasperreports.awt.ignore.missing.font=true.
Particularmente considero a solução dos módulos mais indicada para os casos em que não é possível alterar as configurações do S.O e tampouco dependo do mesmo para que minha aplicação funcione naturalmente. Também tenho a vantagem de independente da distribuição linux que implantar o sistema as fontes estarão lá para uso.
Bem, é isso. Espero que seja útil a comunidade.
Um abraço a todos e que Deus vos abençoe.
Comments