我正在尝试在batik中使用PNGEncoder类将svg文件转换为png格式。 我的代码几乎来自apache网站上给出的示例。
public void writePng(String pngPath) throws Exception{
String parentPath=FileUtils.getParentPath(pngPath);
FileUtils.mkdirs(parentPath);
PNGTranscoder t = new PNGTranscoder();
t.addTranscodingHint(PNGTranscoder.KEY_EXECUTE_ONLOAD,new Boolean(true));
FileInputStream iStream=new FileInputStream(svgPath);
TranscoderInput input = new TranscoderInput(iStream);
OutputStream ostream = new FileOutputStream(pngPath);
TranscoderOutput output = new TranscoderOutput(ostream);
t.transcode(input, output);
ostream.flush();
ostream.close();
}
带有嵌入式javascript的输入svg的片段在
之下<?xml version="1.0" encoding="UTF-8"?>
<svg contentScriptType="text/ecmascript" height="600" version="1.2" width="800" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs/>
<script type="text/ecmascript" xlink:href="file:/D:/dev/svn/deathstar/xfltoalsxml/src/js/helper_functions.js"/>
<script type="text/ecmascript" xlink:href="file:/D:/dev/svn/deathstar/xfltoalsxml/src/js/textFlow.js"/>
<text id="defid_text_1" transform="matrix(1 0 0 1 269.9 57)"/>
<script type="text/ecmascript"><![CDATA[var textNode = document.getElementById('defid_text_1');
textNode.setAttributeNS(null,'x',0);
textNode.setAttributeNS(null,'y',0);
textNode.setAttributeNS(null,'font-size',18);
textNode.setAttributeNS(null,'font-family','ArialMT');
document.documentElement.appendChild(textNode);
textFlow('testdata abcd ',textNode,514.1,0,20,false);
]]></script>
</svg>
每当我尝试运行我的writePng函数时,我都会得到异常
ava.lang.Exception: Unknown language: text/ecmascript
at org.apache.batik.bridge.BridgeContext.getInterpreter(BridgeContext.java:575)
at org.apache.batik.bridge.BaseScriptingEnvironment.getInterpreter(BaseScriptingEnvironment.java:289)
at org.apache.batik.bridge.BaseScriptingEnvironment.loadScripts(BaseScriptingEnvironment.java:404)
at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:214)
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)
at com.amered.xfltojs.app.FrameToSvg.writePng(FrameToSvg.java:156)
at com.amered.xfltojs.app.DocData.generateImageData(DocData.java:172)
使用波形时文件显示正确。
我已经检查了我能想到的任何地方,并且找不到解释为什么会发生这种情况的原因。 希望有人有一些建议。
答案 0 :(得分:0)
我在同样的例外中苦苦挣扎。出于某种原因,这对我有用:
而不是
TranscoderInput input = new TranscoderInput(new FileReader("myfile.svg"));
我用
String file = new File("myfile.svg").toURI().toString();
TranscoderInput input = new TranscoderInput(file);