[英]Batik - How to Export Svg Many Times from SVGGraphics2D
我想要
我注意到,在使用svgGenerator.stream(streamWriter, useCss)
方法将svg文档导出到svg文件svgGenerator.stream(streamWriter, useCss)
svg文档变为空。
有人可以给我一个提示,我的代码有什么问题吗?
public void svgExportExample() {
final SVGGraphics2D svgGenerator = createSvgGenerator();
drawRectangle(svgGenerator);
drawText(svgGenerator);
final String xml1 = toXml(svgGenerator);
final String xml2 = toXml(svgGenerator);
assertEquals("xml document was not changed and should be the same",
xml1, xml2);
}
private SVGGraphics2D createSvgGenerator() {
final Document document = initNewDocument();
final SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
return svgGenerator;
}
private Document initNewDocument() {
// Get a DOMImplementation.
final DOMImplementation domImpl = GenericDOMImplementation
.getDOMImplementation();
// Create an instance of org.w3c.dom.Document.
final String svgNS = "http://www.w3.org/2000/svg";
return domImpl.createDocument(svgNS, "svg", null);
}
private String toXml(final SVGGraphics2D svgGenerator) {
try (ByteArrayOutputStream os = new ByteArrayOutputStream(); OutputStreamWriter streamWriter = new OutputStreamWriter(os)) {
final boolean useCss = true;
// this method clears the content of the xnl-document
svgGenerator.stream(streamWriter, useCss);
return os.toString(StandardCharsets.UTF_8.name());
} catch (final IOException e) {
throw new IllegalStateException(
"a proble during printing to svg file was occured", e);
}
}
private void drawText(final Graphics2D g) {
final String text = "My Text inside Svg";
final int fontSize = 10;
final int width = 10;
final int height = 10;
final Graphics g1 = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB).getGraphics();
final int style = 0;
final Font font = new Font(g1.getFont().toString(), style, fontSize);
g1.dispose();
g.setFont(font);
g.setColor(Color.GREEN);
g.drawString(text, 50, 100);
}
private void drawRectangle(final Graphics2D g) {
g.setColor(Color.RED);
final int width = 500;
final int height = 300;
g.fillRect(0, 0, width, height);
}
您的代码没有错。 通常, stream
清空svgGenerator
。
如果要将其导出到文件中然后再进行处理,建议您
这是我进行编辑的方法(非常简单):
private String toXml(final SVGGraphics2D svgGenerator) {
try (ByteArrayOutputStream os = new ByteArrayOutputStream(); OutputStreamWriter streamWriter = new OutputStreamWriter(os)) {
final boolean useCss = true;
// create new temp SVGGraphics2D
SVGGraphics2D svgToExport = (SVGGraphics2D) svgGenerator.create();
// use it to export (and empty) it
svgToExport.stream(streamWriter, useCss);
return os.toString(StandardCharsets.UTF_8.name());
} catch (final IOException e) {
throw new IllegalStateException(
"a problem during printing to svg file occured", e);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.