2011-10-29 4 views
3

J'utilise AWS Elasti Beanstalk pour alimenter l'une de mes applications. En cela, j'ai besoin d'exporter un document svg en png, jpg, pdf, etc. Pour cela, j'utilise la bibliothèque Apache Batik. Cela fournit une excellente sortie sur mon poste de travail de développement local, mais dès que je le déploie sur l'EBS, je commence à recevoir des erreurs, toutes liées aux polices.J'ai des problèmes avec la bibliothèque Apache Batik sur l'instance AWS ElasticBeanstalk

Le stacktrace d'erreur était -

Caused by: java.lang.Error: Probable fatal error:No fonts found. 
    at sun.font.FontManager.getDefaultPhysicalFont(FontManager.java:1088) 
    at sun.font.FontManager.initialiseDeferredFont(FontManager.java:960) 
    at sun.font.FontManager.findOtherDeferredFont(FontManager.java:899) 
    at sun.font.FontManager.findDeferredFont(FontManager.java:916) 
    ... 
    at sun.font.FontManager.findFont2D(FontManager.java:1904) 
    at sun.font.FontManager.initialiseDeferredFonts(FontManager.java:792) 
    at sun.java2d.SunGraphicsEnvironment.loadFonts(SunGraphicsEnvironment.java:468) 
    at sun.awt.X11GraphicsEnvironment.loadFonts(X11GraphicsEnvironment.java:925) 
    at sun.java2d.SunGraphicsEnvironment.loadFontFiles(SunGraphicsEnvironment.java:498) 
    at sun.java2d.SunGraphicsEnvironment.getInstalledFontFamilyNames(SunGraphicsEnvironment.java:721) 
    at sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:746) 
    at sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:773) 
    at sun.java2d.HeadlessGraphicsEnvironment.getAvailableFontFamilyNames(HeadlessGraphicsEnvironment.java:99) 
    at org.apache.batik.gvt.font.FontFamilyResolver.(FontFamilyResolver.java:74) 
    at org.apache.batik.bridge.SVGTextElementBridge.getFontList(SVGTextElementBridge.java:1529) 
    at org.apache.batik.bridge.SVGTextElementBridge.getAttributeMap(SVGTextElementBridge.java:1610) 
    at org.apache.batik.bridge.SVGTextElementBridge.fillAttributedStringBuffer(SVGTextElementBridge.java:902) 
    at org.apache.batik.bridge.SVGTextElementBridge.buildAttributedString(SVGTextElementBridge.java:856) 
    at org.apache.batik.bridge.SVGTextElementBridge.computeLaidoutText(SVGTextElementBridge.java:636) 
    at org.apache.batik.bridge.SVGTextElementBridge.buildGraphicsNode(SVGTextElementBridge.java:292) 
    at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(GVTBuilder.java:224) 
    at org.apache.batik.bridge.GVTBuilder.buildComposite(GVTBuilder.java:171) 
    at org.apache.batik.bridge.GVTBuilder.build(GVTBuilder.java:82) 
    at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:208) 
    at org.apache.batik.transcoder.image.ImageTranscoder.transcode(ImageTranscoder.java:92) 
    at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142) 
    at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156) 

J'ai essayé d'installer des polices comme one other stackoverflow answer suggests. Mais cela m'a donné une nouvelle erreur stacktrace -

Caused by: java.lang.NoClassDefFoundError: 
Could not initialize class org.apache.batik.gvt.font.FontFamilyResolver 
    at org.apache.batik.bridge.SVGTextElementBridge.getFontList(Unknown Source) 
    at org.apache.batik.bridge.SVGTextElementBridge.getAttributeMap(Unknown Source) 
    at org.apache.batik.bridge.SVGTextElementBridge.fillAttributedStringBuffer(Unknown Source) 
    at org.apache.batik.bridge.SVGTextElementBridge.buildAttributedString(Unknown Source) 
    at org.apache.batik.bridge.SVGTextElementBridge.computeLaidoutText(Unknown Source) 
    at org.apache.batik.bridge.SVGTextElementBridge.buildGraphicsNode(Unknown Source) 
    at org.apache.batik.bridge.GVTBuilder.buildGraphicsNode(Unknown Source) 
    at org.apache.batik.bridge.GVTBuilder.buildComposite(Unknown Source) 
    at org.apache.batik.bridge.GVTBuilder.build(Unknown Source) 
    at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(Unknown Source) 
    at org.apache.batik.transcoder.image.ImageTranscoder.transcode(Unknown Source) 
    at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(Unknown Source) 
    at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(Unknown Source) 

Je ne comprends pas pourquoi est-ce qui se passe. Ensuite, je mets System.setProperty("java.awt.headless", "true"); juste avant de faire un appel au transcodeur de batik. Mais cela génère également le message d'erreur ci-dessus. Je suis à court d'options.

Ai-je raté quelque chose? Puis-je faire quelque chose pour ajouter plus de contexte à cela? Merci pour l'aide.

+0

en cours d'exécution dans le même problème moi-même, si vous comprendre quelque chose s'il vous plaît nous mettre à jour –

Répondre

0

J'ai finalement résolu ce problème en installant Sun JDK & en l'utilisant pour alimenter mon serveur Tomcat.

+0

Cela fait quelques années, pouvez-vous confirmer que c'est toujours un problème avec les JDK non-Oracle? – csvan

2

j'ai ajouté la dépendance suivante à mon dossier Maven pom.xml, et il semble avoir fait la classe disponible pour:

<dependency> 
    <groupId>org.apache.xmlgraphics</groupId> 
    <artifactId>batik-gvt</artifactId> 
    <version>1.7</version> 
</dependency> 

Notez, cependant, que les polices que des cartes pour ne pas ont toujours les mêmes dimensions que les polices de base MS (arial, times new roman, etc.) et peuvent donc sembler plus ou moins complexes que celles qu'ils remplacent.

+0

Mais cette modification maven va où? En faisant la construction de la bibliothèque de batik à partir de zéro? ou autre chose? – Chantz

+0

Notre application est une webapp J2EE Spring et nous utilisons Maven (http://maven.apache.org/) pour gérer les dépendances, construire des cibles, etc. En ajoutant cela au fichier POM.xml, une dépendance indique à maven de télécharger le fichier. jar correspondant du référentiel et le rendre disponible à l'application. Si vous n'utilisez pas Maven, alors je suppose que vous allez juste à http://www.java2s.com/Code/Jar/ABC/Downloadbatikgvt17jar.htm et téléchargez le JAR et assurez-vous qu'il est dans votre chemin JAVA quelque part. –

+0

Merci d'avoir répondu. Mais cela n'a pas fonctionné. :(J'avais déjà importé batick-gvt, mais juste pour être sûr de le remplacer par le fichier jar que vous avez lié et recompilé, mais j'ai toujours la même erreur – Chantz

Questions connexes