У меня есть полуфабрикат.svg. Мне нужно использовать батик, чтобы прочитать его и нарисовать дополнительный график на его основе, как в коде ниже, но браузер потерял метку теста. почему?
Контроллер:
String uri = "E:/shared/java/v1/test/src/main/resources/static/svg/02_panel.svg";
SVGGraphics2D g = SVGUtil.getSVGGraphics2DByUri(uri);
g.setSVGCanvasSize(contentSize);
g.drawString("Test Label", 100, 100);
g.dispose();
byte[] bufg = SVGUtil.transcodeToSVG(g.getDOMFactory());
writeSvgResponse(request, response, bufg);
SVGUtil.java
public static SVGGraphics2D getSVGGraphics2DByUri(String uri) {
try {
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
File file = new File(uri);
InputStream in = new FileInputStream(file);
Document doc = f.createDocument(parser, in);
SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(doc);
SVGGraphics2D g = new SVGGraphics2D(ctx, false);
return g;
} catch (IOException ex) {
ex.printStackTrace();
}
return getSVGGraphics2D();
}
public static byte[] transcodeToSVG(Document doc) throws TranscoderException {
try {
//Determine output type:
SVGTranscoder t = new SVGTranscoder();
TranscoderInput input = new TranscoderInput(doc);
ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
OutputStreamWriter ostream = new OutputStreamWriter(bytestream, StandardCharsets.UTF_8);
TranscoderOutput output = new TranscoderOutput(ostream);
//Perform transcoding
t.transcode(input, output);
ostream.flush();
return bytestream.toByteArray();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
Похоже, это связано с тем, что то, что нарисовал SVGGraphic, не было создано в Документе.
Достижимо ли это требование?