2010-10-21 4 views
12

Après la mise à niveau de Jasper vers la dernière version, il a arrêté de trouver une police: Symbole. Le reste des polices semble être bien. J'ai un tas de TTF dans le même répertoire que l'endroit où jaspe est exécuté, le programme est juste un petit emballage pour générer des fichiers PDF, et il lancer cette erreur:Jasper arrête de trouver une police

net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'Symbol' is not available to the JVM. See the Javadoc for more details. 
    at net.sf.jasperreports.engine.util.JRFontUtil.checkAwtFont(JRFontUtil.java:358) 
    at net.sf.jasperreports.engine.util.JRStyledText.getAwtAttributedString(JRStyledText.java:226) 
    at net.sf.jasperreports.engine.fill.TextMeasurer.measure(TextMeasurer.java:362) 
    at net.sf.jasperreports.engine.fill.JRFillTextElement.chopTextElement(JRFillTextElement.java:1129) 
    at net.sf.jasperreports.engine.fill.JRFillStaticText.prepare(JRFillStaticText.java:183) 
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:329) 
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:419) 
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:378) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2028) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:757) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:269) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:127) 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:942) 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:860) 
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624) 
    at XmlJasperInterface.report(XmlJasperInterface.java:82) 
    at XmlJasperInterface.main(XmlJasperInterface.java:60)</pre> 

Le répertoire où le programme est en cours d'exécution:

# ls *.ttf 
arial.ttf arialbd.ttf lsans.ttf lsansd.ttf lsansi.ttf symbol.ttf 

Toutes les autres fontes sont trouvées. Oh, dans mon ordinateur portable (macosx), ça marche bien, ça ne casse que sur le serveur (Debian). J'ai ouvert symbol.ttf et il s'est bien ouvert sur Mac OS X (juste au cas où le fichier était corrompu).

Des idées sur ce qui pourrait se passer?

Répondre

13

Essayez d'ajouter la ligne

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

à vos jasperreports.properties fichier.

+5

Cela ne le fait pas trouver la police, mais il ne le fait pas se plaindre et utiliser toute autre police qu'il peut. Comme c'était le comportement précédent et que tout le monde était content auparavant, je viens de le faire, même si ce n'est pas la solution optimale. – Pablo

+2

Cela ne résout pas le problème, il ignore simplement le problème. –

+0

Ceci est la valeur par défaut pour jasperserver, mais je reçois toujours l'erreur sur les polices manquantes. –

2

La police doit être installée dans le système d'exploitation sur lequel le rapport est exécuté.

+1

En effet. jasperreports recherche les polices disponibles dans le système d'exploitation. Par exemple, si vous concevez le rapport dans Windows et exécutez l'application sous Linux, vous obtiendrez quelque chose en dehors de ce que vous avez vu dans iReport, sauf si vous utilisez des polices qui peuvent être utilisées dans les deux environnements. – Alfabravo

1

Les étapes faciles à résoudre ce problème serait

  1. Ouvert JasperReports-x.x.x.jar, dans mon cas JasperReports-3.7.2.jar.
  2. Recherchez fichier default.jasperreports.properties et ouvrez-le.
  3. Trouver la ligne net.sf.jasperreports.awt.ignore.missing.font = false valeur et le changement de false à true net.sf.jasperreports.awt.ignore.missing.font = true.
  4. Mettez à jour le récipient.
  5. Ajouter au classpath de votre projet.

Le problème est résolu.

+7

Il n'est pas nécessaire d'éditer le fichier JAR. Vous avez juste besoin de créer un jasperreports.properties et de l'ajouter au classpath juste avec les propriétés que vous voulez modifier (comme indiqué dans la solution acceptée). –

+0

Je l'ai fait fonctionner correctement lors de l'exécution de la classe d'éclipse. mais ça ne marche pas quand j'exporte en tant que jarre Runnable son donne ci-dessous errror "net.sf.jasperreports.engine.JRException: Flux d'entrée non trouvé à: fonts.xml" –

5

Sur ubuntu je devais désinstaller les polices et les réinstaller:

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

Ensuite, il fonctionne bien.

0

Mise à jour pour l'année 2015:

Ajouter ce (ou décommentez in) /etc/apt/sources.list

deb http://us.archive.ubuntu.com/ubuntu/ trusty multiverse 
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse 
deb-src http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse 

Ensuite, exécutez ceci:

sudo apt-get update 
sudo apt-get install msttcorefonts 
0

Je suis utiliser JasperReports 6.3.1. J'ai résolu le problème en ajoutant la ligne suivante dans mon .jrxml:

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

De cette façon, notre rapport examinera quelque chose de différent, en fonction des polices préinstallées dans le système.Dans mon cas, cela ne représente pas un problème, et je ne suis pas intéressé par l'ajout d'une police supplémentaire dans mon projet, car je dois être aussi léger que possible.


Si vous souhaitez utiliser les polices originales du rapport dans tous les environnements d'exécution, une solution facile est d'ajouter les dépendances nécessaires au projet.

Un exemple, pour Maven:

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

Vous pouvez télécharger les bibliothèques et les ajouter manuellement au projet, mais il fonctionnera.


J'espère que vous les trouverez utiles.

Questions connexes