我在Java桌面应用程序(NetBeans中的JUnit测试)中成功使用此代码,以从WMF数据生成SVG:
InputStream wmfStream = new ByteArrayInputStream(wmfBytes);
WMFTranscoder transcoder = new WMFTranscoder();
TranscoderInput wmf = new TranscoderInput(wmfStream);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
TranscoderOutput svg
= new TranscoderOutput(new OutputStreamWriter(bos, "UTF-8"));
transcoder.transcode(wmf, svg);
return bos.toByteArray();
如果我在GlassFish中执行转换,则抛出无头异常:
java.awt.HeadlessException at sun.awt.HeadlessToolkit.getScreenResolution(HeadlessToolkit.java:224) 在 org.apache.batik.transcoder.ToSVGAbstractTranscoder。(ToSVGAbstractTranscoder.java:96) ......还有33个
如何在无头'中使用Apache Batik WMF进行SVG转换? Java运行时环境?
接受的答案Having problems with Apache Batik library on AWS ElasticBeanstalk Instance建议使用Sun JDK。但是,我已经在Oracle JDK 1.7 u 65上运行了GlassFish 4.0.1。
答案 0 :(得分:0)
据推测,WMF使用无头环境无法提供的字体等。没有头脑的意思,没有GUI(X服务器)的(Linux)服务器,依赖于字体渲染和其余部分。安装X服务器Linux软件包应该这样做。
在debian alikes下
apt-get install x-window-system
所以“对于一个服务器的格言不需要图形窗口管理器”的格言不幸是不正确的。
答案 1 :(得分:0)
实际上很容易解决 - 至少在我的开发机器上,需要将GlassFish配置(domain.xml)更改为设置
<jvm-options>-Djava.awt.headless=false</jvm-options>
现在使用x-window-system在Linux上进行测试,稍后将返回结果。