1

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)

波線を使用すると、ファイルが正しく表示されます。

考えられるすべての場所をチェックしましたが、なぜこれが起こっているのかについての説明は見つかりません。うまくいけば、誰かがいくつかの提案をします。

4

1 に答える 1

0

私は同じ例外に苦労していました。何らかの理由で、これは私のために働いた:

それ以外の

TranscoderInput input = new TranscoderInput(new FileReader("myfile.svg"));

私が使う

String file = new File("myfile.svg").toURI().toString();
TranscoderInput input = new TranscoderInput(file);
于 2013-08-16T17:00:44.293 に答える