Hello,

I want

1. To manipulate a svg-document and then export it to svg file
2. Then manipulate existing svg-document again and export it second
   time to a svg file and so on...

I noticed that after a svg-document was exported to an svg file with |svgGenerator.stream(streamWriter, useCss)| method the svg document become empty.

Can some body give me a hint, what is wrong in my code?

I posted my question on stack-overflow, but didn't get any answer, so you are my last hope :-)

|public  void  svgExportExample()  {

  finalSVGGraphics2D  svgGenerator=  createSvgGenerator();

  drawRectangle(svgGenerator);

  drawText(svgGenerator);

  finalString  xml1=  toXml(svgGenerator);

  finalString  xml2=  toXml(svgGenerator);

  assertEquals("xml document was not changed and should be the same",
    xml1,  xml2);

}

private  SVGGraphics2D  createSvgGenerator()  {
  finalDocument  document=  initNewDocument();

  finalSVGGraphics2D  svgGenerator=  new  SVGGraphics2D(document);
  return  svgGenerator;
}

private  Document  initNewDocument()  {
  // Get a DOMImplementation.
  finalDOMImplementation  domImpl=  GenericDOMImplementation
    .getDOMImplementation();

  // Create an instance of org.w3c.dom.Document.
  finalString  svgNS=  "http://www.w3.org/2000/svg";;
  return  domImpl.createDocument(svgNS,  "svg",  null);
}

private  String  toXml(finalSVGGraphics2D  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  (finalIOException  e)  {
    throw  new  IllegalStateException(
      "a proble during printing to svg file was occured",  e);
  }

}

private  void  drawText(finalGraphics2D  g)  {
  finalString  text=  "My Text inside Svg";
  finalint  fontSize=  10;
  finalint  width=  10;
  finalint  height=  10;
  finalGraphics  g1=  new  BufferedImage(width,  height,
    BufferedImage.TYPE_INT_RGB).getGraphics();
  finalint  style=  0;
  finalFont  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(finalGraphics2D  g)  {
  g.setColor(Color.RED);
  finalint  width=  500;
  finalint  height=  300;
  g.fillRect(0,  0,  width,  height);
}|

Reply via email to