La police n'est pas disponible pour la JVM avec Jasper Reports

91

J'essaie de générer un rapport avec DynamicJasper, mais j'obtiens l'erreur suivante:

net.sf.jasperreports.engine.util.JRFontNotFoundException:  
                                 Font 'Arial' is not available to the JVM.   

msttcorefonts est installé, mais je suppose que la JVM n'utilise aucune police de celle-ci.

J'utilise Ubuntu 10.04.

Comment puis-je réparer cela?

Andrew
la source
3
Je l'ignore en fait ... il suffit de définir le suivant "net.sf.jasperreports.awt.ignore.missing.font = true" mauvaise idée ... mais résout le problème pendant un moment ....
Andrew
Vous devrez installer les polices Microsoft dans Ubuntu, reportez-vous à ce lien pour plus d'informations. Embraceubuntu.com/2005/09/09/installing-microsoft-fonts
Sivaramakrishnan
1
où placez-vous cela? Je travaille avec une version intégrée de jasperreports dans jbilling où aucun fichier jasperreports.properties n'existe à modifier.
Darragh
1
@Andrew, cela ne semble pas être une bonne solution (je sais que la question est ancienne), mais il vaut peut-être mieux éviter les incohérences dans les rapports, j'ai transmis la réponse.
Petter Friberg

Réponses:

63

J'ai essayé d'installer mscorefonts, mais le package était installé et à jour.

sudo apt-get update
sudo apt-get install ttf-mscorefonts-installer

J'ai essayé de rechercher la police dans le système de fichiers, avec:

ls /usr/share/fonts/truetype/msttcorefonts/

Ce dossier avait juste le README, avec les instructions correctes sur la façon d'installer.

cat /usr/share/fonts/truetype/msttcorefonts/README

Vous avez besoin d'une connexion Internet pour cela:

sudo apt-get install --reinstall ttf-mscorefonts-installer

J'ai réinstallé ttf-mscorefonts-installer(comme indiqué ci-dessus, en veillant à accepter le CLUF!) Et le problème a été résolu.

Braully Rocha
la source
5
Pour info sur d'autres saveurs Linux, essayez sudo apt-get install msttcorefonts
KCD
pour CentOS et RHEL6 comment résolvez-vous le problème du CLUF? yum install ne vous donne aucune option pour accepter, des idées?
Darragh
Qu'en est-il du système d'exploitation Windows le plus courant?
Sarz
1
C'est un travail autour d'un seul pc, cela ne résoudra aucun problème d'encodage, la bonne façon est d'utiliser les extensions de polices J'ai publié une réponse
Petter Friberg
1
La réponse est correcte pour la situation où nous avions déjà des polices installées mais sans licence acceptée. Voici les étapes à suivre si vous êtes sur le point d'effectuer correctement la première installation automatisée: sudo echo ttf-mscorefonts-installer msttcorefonts / accept-mscorefonts-eula select true | debconf-set-selections && apt-get install -y -q ttf-mscorefonts-installer
Aleksander Lech
35

JasperReports lève une exception JRFontNotFoundException dans le cas où la police utilisée dans un modèle de rapport n'est pas disponible pour la JVM en tant que police système ou en tant que police provenant d'une extension de police JR. Cela garantit que tous les problèmes causés par les incohérences de métriques de polices sont évités et nous avons un avertissement précoce sur l'incohérence.

Jasper Reports essaie de vous aider dans le développement de votre rapport, déclarant qu'il ne peut pas exporter correctement votre rapport car il ne trouve pas la police définie dans TextFieldouStaticText

<font fontName="Arial"/>

Oui, vous pouvez désactiver cela en définissant net.sf.jasperreports.awt.ignore.missing.font sur true mais vous aurez des incohérences d'exportation .

Oui, vous pouvez installer la police en tant que police système JVM (mais vous devez le faire sur chaque PC utilisé qui peut générer un rapport et vous pouvez toujours avoir des problèmes d'encodage ).

La bonne manière!

Utilisez les extensions de polices ! , si vous souhaitez créer le vôtre (voir le lien ci-dessous), jasper reports distribue également un jasperreports-fonts-x.x.x.jarfichier jar ( ) d' extension de police par défaut , qui prend en charge fontName DejaVu Sans, DejaVu SerifetDejaVu Sans Mono

<font fontName="DejaVu Sans"/>

Extrait du guide JasperReport Ultimate:

Nous encourageons vivement les utilisateurs à n'utiliser que des polices dérivées d'extensions de polices, car c'est le seul moyen de s'assurer que les polices seront disponibles pour l'application lorsque les rapports seront exécutés au moment de l'exécution. L'utilisation de polices système entraîne toujours le risque que les rapports ne fonctionnent pas correctement lorsqu'ils sont déployés sur une nouvelle machine sur laquelle ces polices peuvent ne pas être installées

Liens sur StackOverflow sur la façon de rendre correctement les polices en pdf

Liste de contrôle sur la façon de rendre correctement la police en pdf

Générer des extensions de polices avec JasperSoft Studio

Générer des extensions de polices avec iReport

Petter Friberg
la source
Pourriez-vous me dire la raison pour laquelle Jasper et JVM n'ont pas pu rendre le PDF avec une police qui existe dans le système (située dans C: \ windows \ fonts), à la place je dois créer une extension Jar Font et l'ajouter en tant que bibliothèque dans le chemin de classe du projet (j'utilise Java et Eclipse). J'ai essayé de chercher la réponse sur Google mais je n'ai pas trouvé d'explication compréhensible. Je vois également ces problèmes d'exportation de polices pdf avec Apache FOP (aucune extension de police nécessaire mais j'ai dû créer un fichier font-metric-file et ai fait quelques configurations supplémentaires pour que la police soit rendue correctement)
EagerToLearn
1
@EagerToLearn tout se résume à la bibliothèque itext qui génère le pdf, itext pour rendre correctement les polices a besoin d'extensions de polices (où non seulement la police est incluse mais aussi le codage, si l'ecc intégré est spécifié). Si vous ne fournissez pas cela, itext fera ce qu'ils appellent «meilleur effort» pour rendre votre police. Vous ne faites pas ce dont nous avons besoin (écrit dans la documentation), faisons de notre mieux, mais la faute est à vous. Par conséquent, la réponse acceptée à cette question n'est pas correcte !, Des extensions de police sont nécessaires, si vous ne fournissez pas, vous devrez vivre avec tout ce qui est créé.
Petter Friberg
merci pour la réponse, mais je comprends toujours que le problème de la police est dû au fonctionnement de la bibliothèque iText. Peut-être que cette police est bien au-delà de ma capacité technique à comprendre :(
EagerToLearn
@eag Ce n'est pas beaucoup plus que cela à comprendre, pour rendre une police, vous devez savoir où se trouve le .ttf et vous devez savoir quel est l'encodage du texte. Les développeurs de la bibliothèque pour connaître ces informations ont créé des extensions de polices, si vous ne les fournissez pas, ils doivent commencer à deviner, pourquoi cela ne fonctionne pas dans certains cas est parce que le "deviner" n'est pas correct, mais vous ne pouvez pas blâmer la bibliothèque pour ceci puisqu'ils vous ont fourni un système pour éviter les "devinettes"
Petter Friberg
22

J'utilise IReport pour installer la police:

outils -> options -> polices -> cliquez sur installer la police

Sélectionnez ensuite la police et cliquez sur

-> exporter en tant qu'extension et saisir le nom myfont.jar

ajoutez ce jar et aussi spring.jar * à votre chemin de construction.

* copiez spring.jar depuis Jaspersoft \ iReport-3.7.0 \ ireport \ modules \ ext

Juan
la source
1
Pour terminer, le ttf arial est dans c: / windows / fonts (au moins dans win xp): arial.ttf, arialbd.ttf (gras), ariali.ttf (italique), arialbi (gras-italique)
jneira
L'ajout de spring.jar au chemin de construction l'a corrigé.
fishjd
Cette méthode a fonctionné pour moi. Il conditionne la police sous forme de fichier jar, vous l'ajoutez au chemin de classe et les choses fonctionnent simplement.
Satya
Si l'extension de police est correctement créée, il n'est pas nécessaire d'ajouter le fichier spring.jar.
Petter Friberg le
Cet outil-> options-> polices-> cliquez sur installer n'est pas disponible sur mac. :( des suggestions?
L-Samuels
13

sudo apt-get install msttcorefonts fonctionne (sur notre environnement de développement Ubuntu), mais ce n'est pas une très bonne solution.

Au lieu de cela, nous avons regroupé les polices avec notre application sur la base de cette astuce . Leur fichier JAR regroupe les polices suivantes,

  • Arial
  • Times New Roman
  • Courier Nouveau
  • Comic Sans MS
  • Géorgie
  • Verdana
  • Monospace

Lien direct pour télécharger le bocal: Maven ver 1.0. DynamicFonts

user799188
la source
Cela peut maintenant être téléchargé à partir du référentiel mvn standard, par exemple: mvnrepository.com/artifact/ar.com.fdvs/DynamicJasper-core-fonts
Markus Pscheidt
12

Pour CentOS:

wget msttcorefonts

Ensuite:

tar -zxvf msttcorefonts.tar.gz
cp msttcorefonts/*.ttf  /usr/share/fonts/TTF/
fc-cache -fv 

Après tout, redémarrez JVM.

Ricardo Carmo
la source
9

Il existe trois méthodes pour éviter un tel problème.

Méthode 1: en définissant ignorer la propriété de police manquante.

JRProperties.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");

ou vous pouvez définir cette propriété en entrant la ligne suivante dans le fichier .jrxml.

<property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>

Méthode 2: en définissant la propriété de police par défaut.

JRProperties.setProperty("net.sf.jasperreports.default.font.name", "Sans Serif");

ou vous pouvez définir cette propriété en entrant la ligne suivante dans le fichier .jrxml.

<property name="net.sf.jasperreports.default.font.name" value="Sans Serif"/>

Méthode 3: en ajoutant la propriété de police manquante.

Tout d'abord, installez les polices manquantes dans IReport en sélectionnant "Outils >> Options >> Polices >> Installer la police" puis sélectionnez toutes les polices et exportez-la en cliquant sur "Exporter comme extension" avec l'extension .jar.

Vous pouvez utiliser ce jar pour Jasperreports-font.XXXjar qui sera présent dans votre bibliothèque de projet ou chemin de classe.

Mayur Bhokase
la source
5

J'ai résolu ce problème en choisissant «SansSerif» ou «Serif» uniquement et non «Arial» ou «Times New Roman».

lkdg
la source
6
Conformément à la documentation de l'exception ( jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/… ), cette méthode n'est pas explicitement recommandée. Cela peut entraîner des problèmes de rendu inattendus, car ces polices peuvent être mappées à différentes polices système sur différents systèmes.
Doug
3

Si vous utilisez maven dans votre projet, vous pouvez simplement ajouter la dépendance jasper-fonts à pom.xml:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-fonts</artifactId>
    <version>6.8.1</version>
</dependency>

L'installation de la police manquante sur le système peut être une solution de travail mais pas pour moi, je ne voulais pas avoir à installer les polices manquantes après chaque déploiement dans un nouveau serveur, j'ai plutôt opté pour l'incorporation de la police avec l'application.

Cordialement.

Yassir
la source
2

peut créer vos polices personnalisées via iReport et les convertir comme des fichiers jars

mavirroco
la source
2

Essayez d'ajouter la ligne

net.sf.jasperreports.awt.ignore.missing.font = true

dans votre fichier jasperreports.properties.

Jasper arrête de trouver une police

Enrico Sanna
la source
1
et c'est une mauvaise idée ... exporter les incohérences!
Petter Friberg
@PetterFriberg non, c'est un bon mécanisme de secours. Vous ne pouvez pas toujours contrôler la JVM. C'est TOUJOURS une bonne idée d'avoir un mécanisme de secours, même si le résultat n'est pas idéal, c'est mieux qu'un plantage d'application causé par une police manquante sur une machine client.
jwenting le
@jwenting ajoute des extensions de polices et cela ne plantera pas. Croyez-moi si vous désactivez vous faites quelque chose de mal, vous aurez des rapports incorrects générés à la place, vous devriez résoudre le problème racine (extensions de polices manquantes). Et oui, vous pouvez toujours contrôler JVM.
Petter Friberg
@jwenting Remarque: la solution n'est pas d'installer les polices sur le serveur (comme le dit la réponse d'acceptation, c'est faux!). La solution est de générer et d'ajouter des extensions de polices de dépendance. Voir ceci pour la bonne réponse stackoverflow.com/a/35549391
Petter Friberg
@PetterFriberg, ce qui est souvent impossible. Par exemple, l'application que je gère s'exécute sur un serveur, mais permet à l'utilisateur d'ajouter des fichiers .jrxml personnalisés avec une convention de dénomination spécifique afin de générer des rapports personnalisés au-delà de ce que nous fournissons en standard. Ne voulez pas que ces rapports plantent si le serveur ne dispose pas des polices disponibles spécifiées par le .jrxml, nous utilisons donc une solution de secours.
jwenting le
2

Vous pouvez le faire en installant des polices, c'est-à-dire partout où vous souhaitez exécuter cette application particulière. Le moyen le plus simple consiste simplement à ajouter cette ligne bl à votre fichier jrxml:

 <property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>

J'espère que cela aide.

Stephen
la source
1
Cela créera cependant des incohérences d'exportation (par conséquent, il ne peut pas être rendu avec la police indiquée dans jrxml). Voyez ma réponse.
Petter Friberg
2

Pour Debian

ajouter

non-free contrib

à deb et deb-src dans /etc/apt/sources.list ie:

deb http://ftp.debian.org/debian/ squeeze main non-free contrib
deb-src http://ftp.debian.org/debian/ squeeze main non-free contrib

ensuite

apt-get update
apt-get install msttcorefonts

Bien sûr, vous devrez redémarrer jasperserver. c'est à dire:

/opt/jasperreports-server-cp-4.5.0/ctlscript.sh restart

Changez pour votre version / chemin.

d -_- b
la source
2

J'ai rencontré le problème avec mon application Web basée sur Spring 3 et déployée sur Weblogic 10.3 sur Oracle Linux 6. La solution mentionnée sur le lien ne fonctionnait pas pour moi.

J'ai dû suivre les étapes suivantes - 1. Copiez les fichiers de polices Arial * .ttf dans le répertoire JROCKIT_JAVA_HOME / jre / lib / fonts 2. Entrez les polices dans fontconfig.properties.src 3. Redémarrez le cluster à partir de la console Weblogic

filename.Arial=Arial.ttf
filename.Arial_Bold=Arial_Bold.ttf
filename.Arial_Italic=Arial_Italic.ttf
filename.Arial_Bold_Italic=Arial_Bold_Italic.ttf
Ujjwal
la source
1

Créer un rapport Jasper en plusieurs langues (Unicode)

1) Installez la police dans ireport desginer

2) créer une extension de police (nous l'utiliserons dans le classpath des applications)

3) installer la police sur os (facultatif)

4) collez tous les .ttf de la police dans le répertoire jre-> lib-> fonts (sinon l'application Web lancera une erreur de police n'est pas disponible pour JVM)

rushabh
la source
0

En fait, j'ai résolu ce problème d'une manière très simple

  1. allez à votre home path, comme/root
  2. créer un dossier nommé .fonts
  3. copiez votre all your font filesvers .fonts, vous pouvez copier la police depuis C:\windows\fontssi vous utilisez Windows.
  4. sudo apt-get install fontconfig
  5. fc-cache –fv pour reconstruire les caches de polices.
Saorikido
la source
0

Solution en 2 étapes (si vous utilisez centOS)

  1. Téléchargez le package rpm des polices Microsoft Core.

    [root@WEBSVR~/]# wget http://www.itzgeek.com/msttcore-fonts-2.0-3.noarch.rpm
    
  2. Installez le package rpm.

    [root@WEBSVR~/]# rpm -Uvh msttcore-fonts-2.0-3.noarch.rpm
    
Prasanna Venkat
la source
-1

Copiez vos polices dans le répertoire suivant JDK_HOME \ jre \ lib \ fonts

Ahmad Zyoud
la source