我尝试编辑现有的SVG,然后使用Batik保存它(我需要不同的格式和DOM操作)。
我的所作所为:
转码后,我得到一个新的SVG文件,它填充了XML,但无法在Firefox或Illustrator中正确呈现。
在Firefox中,我得到的信息是XML格式不正确,例如,
<glyph horiz-adv-x="249" unicode=""/>
我的代码:
///////////////
// Load Template File (with embedded Fonts)
///////////////
File file = new File(SVGFilePath);
FileInputStream svgInputStream = new FileInputStream(file);
////////////////////
// Load SVG into DOM-Tree
////////////////////
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
Document doc = factory.createDocument(parser, svgInputStream);
//...
///////////////////////
// Generate Output File
///////////////////////
String savepath = "test.svg";
byte[] fileData = transcodeToSVG(doc);
FileOutputStream fileSave = new FileOutputStream(savepath);
fileSave.write(fileData);
fileSave.close();
我的转码:
public byte[] transcodeToSVG(Document doc) throws TranscoderException {
try {
//Determine output type:
SVGTranscoder t = new SVGTranscoder();
//Set transcoder input/output
TranscoderInput input = new TranscoderInput(doc);
ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
OutputStreamWriter ostream = new OutputStreamWriter(bytestream);
TranscoderOutput output = new TranscoderOutput(ostream);
//Perform transcoding
t.transcode(input, output);
ostream.flush();
ostream.close();
return bytestream.toByteArray();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
答案 0 :(得分:1)
我错过了正确的文件编码。
更改后
OutputStreamWriter ostream = new OutputStreamWriter(bytestream);
到
OutputStreamWriter ostream = new OutputStreamWriter(bytestream, "UTF-8");
效果很好。