2011-10-29 107 views
3

我正在使用AWS Elasti Beanstalk为我的一个应用程序供电。在这我需要导出一个svg文件到png,jpg,pdf等。为此我使用Apache Batik库。这在我的本地开发工作站上提供了出色的输出,但是一旦我将它部署到EBS上,我就开始出现错误,所有错误都与字体相关。在AWS上的Apache Batik库存在问题ElasticBeanstalk实例

错误堆栈跟踪是 -

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) 

所以我尝试安装的字体作为one other stackoverflow answer suggests.但是,这给了我一个新的错误堆栈跟踪 -

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) 

我不明白为什么会出现这种情况。然后在我打电话给蜡染的代码转换器之前,我设置了System.setProperty("java.awt.headless", "true");。但是这也会产生上述错误信息。我没有选择。

我错过了什么吗?我可以做任何事情来为此添加更多的上下文吗?谢谢您的帮助。

+0

自己遇到同样的问题,如果你想出任何东西请更新我们 –

回答

0

我最终通过安装Sun JDK &来为我的tomcat服务器供电来解决这个问题。

+0

已经过了几年了,你能否证实这仍然是非Oracle JDK的问题? – csvan

2

添加以下的依赖,以我的Maven pom.xml文件,它似乎已经交付使用的类:

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

注意,但是,它映射到不字体总是与MS核心字体(宋体,时间新罗马等)具有相同的尺寸,因此可能看起来有些块状或不同于他们正在替换的。

+0

但这个maven修改去哪里?从头开始构建蜡染库?或者是其他东西? – Chantz

+0

我们的应用程序是一个J2EE Spring Web应用程序,我们使用Maven(http://maven.apache.org/)来管理依赖关系,构建目标等。基本上将此添加到POM.xml作为依赖关系告诉Maven去下载从存储库中获取相应的jar并将其提供给应用程序。如果你不使用Maven,那么我想去http://www.java2s.com/Code/Jar/ABC/Downloadbatikgvt17jar.htm下载JAR,并确保它在你的JAVA路径中。 –

+0

感谢您的回复。但那没有用。 :(我已经导入了batick-gvt,但只是为了确保我将它替换为已链接并重新编译的jar文件,但仍然出现同样的错误。 – Chantz