Hi,
it seems nobody answers, so I will point you to my "dirty" code. I am a
student and not well experienced programmer, but maybe it is helpful
anyway.
I use this method:
private String generateSVG() throws
TransformerFactoryConfigurationError, TransformerException {
String result ="";
Transformer transformer;
transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// initialize StreamResult with File object to save to file
StreamResult streamResult = new StreamResult(new
StringWriter());
DOMSource source = new DOMSource(model.getSVGDoc());
transformer.transform(source, streamResult);
result = streamResult.getWriter().toString();
return result;
}
I use the String, which is returned with another method, to write it to
the disk:
private void saveFile(File saveFile, String xmlData) throws IOException
{
// File saveFile = new File(filename);
if(!saveFile.exists()){
// System.out.printf("Create new File %s. \n", filename);
saveFile.createNewFile();
FileWriter fw = new FileWriter(saveFile);
fw.write(xmlData);
fw.close();
} else {
System.out.printf("ERROR: File %s already exist. Did
nothing. \n",
saveFile.toURI().toString());
}
}
I attached you the complete file. Hope this help you.
Regards,
Keywan
Am Freitag, den 22.02.2008, 13:11 +0000 schrieb harvinder singh:
> Hello everyone,
>
> I am developing an application that generates Graphics2D visualisation
> of a network (JUNG), I would like to convert the Graphics2D output of
> the current visualization to and SVG document. However I am unabke to
> find anything, I have Batik generating SVG from the sample provided on
> the Batik website but how shouold I make it to generate an SVG of my
> generated graphics (how should i forward the graphics to Batik) to
> make it write an SVG output.
>
> Please help!!!
>
> Harvinder Singh
>
>
>
> ______________________________________________________________________
> She said what? About who? Shameful celebrity quotes on Search Star!
--
Keywan Najafi Tonekaboni
http://www.prometoys.net
[EMAIL PROTECTED]:/# apt-get --purge remove dominion
After unpacking world will be freed.
You are about to do something potentially beneficial
To continue type in the phrase 'Yes, do as We say!'
/*
* DocumentJPanel.java
*
* Created on 21. November 2006, 14:36
*/
package net.prometoys.codilire;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Point;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.ImageObserver;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import javax.imageio.ImageIO;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.batik.bridge.UpdateManager;
import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
import org.apache.batik.dom.svg.SVGDOMImplementation;
import org.apache.batik.svggen.ImageHandlerPNGEncoder;
import org.apache.batik.svggen.SVGGeneratorContext;
import org.apache.batik.svggen.SVGGraphics2D;
import org.apache.batik.svggen.SVGGraphics2DIOException;
import org.apache.batik.swing.JSVGCanvas;
import org.apache.batik.swing.JSVGScrollPane;
import org.apache.batik.swing.svg.GVTTreeBuilderAdapter;
import org.apache.batik.swing.svg.GVTTreeBuilderEvent;
import org.apache.batik.swing.svg.SVGDocumentLoaderAdapter;
import org.apache.batik.swing.svg.SVGDocumentLoaderEvent;
import org.apache.batik.util.XMLResourceDescriptor;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Element;
import org.w3c.dom.svg.SVGDocument;
/**
*
* @author keywan
*/
public class DocumentJPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
public static final int ACTION_SELECT=0;
public static final int ACTION_RECT=1;
public static final int ACTION_ARC=2;
public static final int ACTION_LINE=3;
// private final double zoom = 0.8;
public DocumentJPanel(CodilireModel m) {
model = m;
// jFrameMainFrame = model.getFrame();
initComponents();
// openFile();
//// Just for faster testing.
// try {
// newSVG(new File(System.getProperty("user.home")+"/workspace/codilire/test4.svg"));
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// System.exit(1);
// }
}
private SVGGraphics2D initSVG(SVGDocument doc) {
System.out.println("Initiating SVG");
// Create a converter for this document.
SVGGraphics2D g = new SVGGraphics2D(doc);
Element root = doc.getDocumentElement();
g.getRoot(root);
return g;
}
private void genSVG(File file) {
DOMImplementation impl = SVGDOMImplementation.getDOMImplementation();
String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
SVGDocument doc = (SVGDocument) impl.createDocument(svgNS, "svg", null);
SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(doc);
ImageHandlerPNGEncoder ihandler = null;
try {
ihandler = new ImageHandlerPNGEncoder("images", null);
} catch (SVGGraphics2DIOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ctx.setImageHandler(ihandler);
SVGGraphics2D g = new SVGGraphics2D(ctx, false);
Image bgImage = null;
try {
bgImage = ImageIO.read(file);
ImageObserver imageObserver = new ImageObserver() {
public boolean imageUpdate(Image img, int infoflags, int x, int y,
int width, int height) {
// TODO Auto-generated method stub
return false;
}
};
model.setSize(new Dimension(bgImage.getWidth(imageObserver),
bgImage.getHeight(imageObserver)));
g.setSVGCanvasSize(model.getSize());
g.drawImage(bgImage, 0, 0, imageObserver);
} catch (Exception e) {
Shape shape = new Rectangle2D.Double(1,1,1,1);
g.setPaint(Color.WHITE);
g.fill(shape);
System.err.println("Failed to load background image.");
}
Element root = doc.getDocumentElement();
g.getRoot(root);
model.setSVGGraphic2D(g);
setModel(doc);
}
private boolean prepareShape(Point p1, Point p2, int action, Color color, AffineTransform at) {
Point start = new Point();
Point end = new Point();
double width = 0;
double height = 0;
PacketModel pm = null;
// p1.setLocation(x, y)
p1 = transformPoint(p1, at);
p2 = transformPoint(p2, at);
if(p1.getX()!=p2.getX() && p1.getY()!=p2.getY()) {
if (action != DocumentJPanel.ACTION_LINE){
if(p1.getX()<p2.getX()){
start.x = (int)p1.getX();
end.x = (int)p2.getX();
} else {
start.x= (int)p2.getX();
end.x = (int)p1.getX();
}
if(p1.getY()<p2.getY()){
start.y = (int)p1.getY();
end.y = (int)p2.getY();
} else {
start.y= (int)p2.getY();
end.y = (int)p1.getY();
}
width = (end.getX() - start.getX());
height = (end.getY() - start.getY());
pm = new PacketModel(start, action, width, height, color);
} else if (action == DocumentJPanel.ACTION_LINE) {
pm = new PacketModel(p1, action, p2, color);
}
// System.out.println("Action to PM: " + action);
return drawShape(pm, false);
} else {
System.out.println("WARNING: Do nothing, it's just a point");
return false;
}
}
/**
* @param p
* @param at
*/
private Point transformPoint(Point p, AffineTransform at) {
int new_x = p.x -(int)at.getTranslateX();
int new_y = p.y -(int)at.getTranslateY();
Point result = new Point();
result.setLocation(new_x/at.getScaleX() , new_y/at.getScaleY());
return result;
}
protected boolean drawShape(PacketModel pm, boolean from_remote) {
boolean result;
System.out.println("Got PacketModel");
try {
UpdateManager um = jSVGCanvasBackground.getUpdateManager();
Runnable r = new CodilirePainter(model, pm, from_remote);
um.getUpdateRunnableQueue().invokeLater(r);
result = true;
// System.out.println("draw it");
} catch (Exception e) {
e.printStackTrace();
// System.err.println("ERROR while draw it");
result = false;
}
return result;
}
private void initComponents() {
// jMenuBarMain = new JMenuBar();
// jMenuMain = new JMenu();
buttonGroupEdit = new ButtonGroup();
JLabelStatus = new JLabel();
jToolBarTools = new JToolBar();
jButtonOpen = new JButton();
jButtonSave = new JButton();
jButtonUndo = new JButton();
// jButtonZoomIn = new JButton();
// jButtonZoomOut = new JButton();
jButtonColor = new JButton();
jComboBoxZoom = new JComboBox();
jToggleButtonRect = new JToggleButton();
jToggleButtonArc = new JToggleButton();
jToggleButtonLine = new JToggleButton();
jToggleButtonSelect = new JToggleButton();
// jMenuMain.setText("Menu");
// jMenuBarMain.add(jMenuMain);
setLayout(new java.awt.BorderLayout());
JLabelStatus.setFont(new java.awt.Font("Dialog", 0, 12));
JLabelStatus.setText("Status");
add(JLabelStatus, java.awt.BorderLayout.SOUTH);
jButtonOpen.setText("Open");
// Set the button action.
jButtonOpen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
openFile();
}
});
jToolBarTools.add(jButtonOpen);
jButtonSave.setText("Save");
jButtonSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
JFileChooser fc = new JFileChooser(".");
int choice = fc.showSaveDialog(mainPanel);
if (choice == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
try {
System.out.println(file.toURI().toString());
System.out.println(file.toString());
// jSVGCanvasBackground.setURI(f.toURL().toString());
try {
saveFile(file, generateSVG());
} catch (TransformerFactoryConfigurationError e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
});
jToolBarTools.add(jButtonSave);
jButtonUndo.setText("Undo");
jToolBarTools.add(jButtonUndo);
// jButtonZoomOut.setText("-");
// jToolBarTools.add(jButtonZoomOut);
// jButtonZoomOut.addActionListener(new ActionListener() {
//
// public void actionPerformed(ActionEvent e) {
// // TODO Auto-generated method stub
//// ViewBox.get
// JSVGCanvas.ZoomAction za = jSVGCanvasBackground.new ZoomAction(zoom);
// za.actionPerformed(e);
// }
//
// });
//
// jButtonZoomIn.setText("+");
// jToolBarTools.add(jButtonZoomIn);
// jButtonZoomIn.addActionListener(new ActionListener() {
//
// public void actionPerformed(ActionEvent e) {
// // TODO Auto-generated method stub
// JSVGCanvas.ZoomAction za = jSVGCanvasBackground.new ZoomAction(1/zoom);
// za.actionPerformed(e);
// }
//
// });
//
DefaultComboBoxModel zoomModel = new DefaultComboBoxModel(new String[] { "Fit in Page", "Fit in Width", "---", "25%", "50%", "100%", "200%", "300%", "400%", "800%" });
jComboBoxZoom.setModel(zoomModel);
jComboBoxZoom.setSelectedIndex(5);
jComboBoxZoom.setMaximumSize(new java.awt.Dimension(120, 60));
jComboBoxZoom.setMinimumSize(new java.awt.Dimension(40, 24));
jComboBoxZoom.setPreferredSize(new java.awt.Dimension(80, 24));
jComboBoxZoom.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
double d = 1;
int i = jComboBoxZoom.getSelectedIndex();
switch (i) {
case 3:
d = 0.25;
System.out.println("Set new zoom" + d + "/" + i);
break;
case 4:
d = 0.5;
System.out.println("Set new zoom" + d + "/" + i);
break;
case 5:
d = 1;
System.out.println("Set new zoom" + d + "/" + i);
break;
// 2 3 4 8
case 6:
d = 2;
System.out.println("Set new zoom" + d + "/" + i);
break;
case 7:
d = 3;
System.out.println("Set new zoom" + d + "/" + i);
break;
case 8:
d = 4;
System.out.println("Set new zoom" + d + "/" + i);
break;
case 9:
d = 8;
System.out.println("Set new zoom" + d + "/" + i);
break;
default:
System.out.printf("Set no zoom: %d", i);
break;
}
// JSVGCanvas.ZoomAction za = jSVGCanvasBackground.new ZoomAction(d);
// // TODO Auto-generated method stub
// za.actionPerformed(e);
jSVGCanvasBackground.setRenderingTransform(AffineTransform.getScaleInstance(d, d));
}
});
jToolBarTools.add(jComboBoxZoom);
buttonGroupEdit.add(jToggleButtonRect);
// jToggleButtonRect.setText("Rect");
jToggleButtonRect.setToolTipText("Rect");
jToolBarTools.add(jToggleButtonRect);
loadIcon("draw_rect.png",jToggleButtonRect, "Rect");
jToggleButtonRect.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
model.setAction(ACTION_RECT);
}
});
buttonGroupEdit.add(jToggleButtonArc);
jToggleButtonArc.setToolTipText("Arc");
jToolBarTools.add(jToggleButtonArc);
loadIcon("draw_arc.png",jToggleButtonArc, "Arc");
jToggleButtonArc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
model.setAction(ACTION_ARC);
}
});
buttonGroupEdit.add(jToggleButtonLine);
jToggleButtonLine.setToolTipText("Line");
jToolBarTools.add(jToggleButtonLine);
loadIcon("draw_line.png",jToggleButtonLine, "Line");
jToggleButtonLine.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
model.setAction(ACTION_LINE);
}
});
buttonGroupEdit.add(jToggleButtonSelect);
jToggleButtonSelect.setToolTipText("Select");
jToolBarTools.add(jToggleButtonSelect);
loadIcon("draw_select.png",jToggleButtonSelect, "Select");
add(jToolBarTools, java.awt.BorderLayout.NORTH);
jToggleButtonSelect.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
model.setAction(ACTION_SELECT);
}
});
jToggleButtonSelect.setSelected(true);
jButtonColor.setText("Color");
jToolBarTools.add(jButtonColor);
jButtonColor.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
model.setColor(JColorChooser.showDialog(
null, "Wähle neue Farbe", model.getColor()));
}
});
try {
jSVGCanvasBackground = new JSVGCanvas();
jSVGCanvasBackground.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
// jSVGCanvasBackground.setSVGDocument(doc);
jSVGCanvasBackground.addMouseMotionListener(new MouseMotionListener(){
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
// System.out.println("Mouse dragged: " + e.getPoint());
JLabelStatus.setText(e.getPoint().getX()+"/"+e.getPoint().getY());
}
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
JLabelStatus.setText(e.getPoint().getX()+"/"+e.getPoint().getY());
}
});
jSVGCanvasBackground.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
// System.out.println("Mouse pressed: " + e.getPoint());
startPoint = e.getPoint();
}
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
// System.out.println(jSVGCanvasBackground.getViewingTransform().toString());
System.out.println(jSVGCanvasBackground.getViewBoxTransform().toString());
// System.out.println("Start: " + startPoint);
// System.out.println("Finish: " + e.getPoint());
// System.out.println("Action: " + model.getAction());
prepareShape(startPoint, e.getPoint(), model.getAction(), model.getColor(), jSVGCanvasBackground.getViewBoxTransform());
}
});
jSVGScrollPaneBgPane = new org.apache.batik.swing.JSVGScrollPane(jSVGCanvasBackground);
add(jSVGScrollPaneBgPane, java.awt.BorderLayout.CENTER);
} catch (Exception e) {
e.printStackTrace();
}
// Set the JSVGCanvas listeners.
jSVGCanvasBackground.addSVGDocumentLoaderListener(new SVGDocumentLoaderAdapter() {
public void documentLoadingStarted(SVGDocumentLoaderEvent e) {
JLabelStatus.setText("Document Loading...");
}
public void documentLoadingCompleted(SVGDocumentLoaderEvent e) {
JLabelStatus.setText("Document Loaded.");
}
});
jSVGCanvasBackground.addGVTTreeBuilderListener(new GVTTreeBuilderAdapter() {
public void gvtBuildStarted(GVTTreeBuilderEvent e) {
JLabelStatus.setText("Build Started...");
}
public void gvtBuildCompleted(GVTTreeBuilderEvent e) {
JLabelStatus.setText("Build Done.");
// jFrameMainFrame.pack();
JLabelStatus.setText("ready");
}
});
// jFrameMainFrame.pack();
// jSVGCanvasBackground.setSize(size);
//TODO: This listener probably does nothing!
jSVGCanvasBackground.addVetoableChangeListener(new VetoableChangeListener() {
public void vetoableChange(PropertyChangeEvent evt)
throws PropertyVetoException {
// TODO Auto-generated method stub
System.out.println("Property changed" +evt.getPropertyName());
}
});
JLabelStatus.setText(model.getContact());
System.out.println( "DJPinitC model remote: " + model.getRemote() );
}
private void loadIcon(String file, AbstractButton button, String label) {
try {
button.setIcon(new ImageIcon(ClassLoader.getSystemResource("icons/"+file)));
} catch (Exception e7) {
//.getClass().getClassLoader().getRessource("/meinBild.png")
try {
button.setIcon(new ImageIcon(getClass().getResource("/"+file)));
} catch (Exception e) {
// TODO: handle exception
System.err.println("Failed to load: " + file);
button.setText(label);
}
// TODO: handle exception
}
}
private String generateSVG() throws TransformerFactoryConfigurationError, TransformerException {
String result ="";
Transformer transformer;
transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// initialize StreamResult with File object to save to file
StreamResult streamResult = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(model.getSVGDoc());
transformer.transform(source, streamResult);
result = streamResult.getWriter().toString();
return result;
}
private void saveFile(File saveFile, String xmlData) throws IOException {
// File saveFile = new File(filename);
if(!saveFile.exists()){
// System.out.printf("Create new File %s. \n", filename);
saveFile.createNewFile();
FileWriter fw = new FileWriter(saveFile);
fw.write(xmlData);
fw.close();
} else {
System.out.printf("ERROR: File %s already exist. Did nothing. \n", saveFile.toURI().toString());
}
}
// private void setAction(int i){
// action =i;
// }
//
private void newSVG(File file) throws IOException {
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
SVGDocument doc = (SVGDocument) factory.createDocument(file.toURI().toString());
setModel(doc);
}
/**
* @param doc
*/
private void setModel(SVGDocument doc) {
model.setSVGDoc(doc);
model.setSVGGraphic2D(initSVG(doc));
jSVGCanvasBackground.setSVGDocument(doc);
}
/**
*
*/
private void openFile() {
JFileChooser fc = new JFileChooser(".");
// TODO: Filter lut/svg/png
int choice = fc.showOpenDialog(mainPanel);
if (choice == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
try {
String filename = file.toString().toLowerCase();
// System.out.println("Filename is " + filename);
if (filename.endsWith("png")){
System.out.println("Generate SVG from PNG");
genSVG(file);
} else if(filename.endsWith("svg")){
System.out.println("Load SVG");
newSVG(file);
} else {
// TODO: GUI-Fehlermeldung / vorher sowieso Fehlermeldung
System.err.println("ERROR: Unknown Filetype");
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
private CodilireModel model;
// private JFrame jFrameMainFrame;
private JLabel JLabelStatus;
private ButtonGroup buttonGroupEdit;
private JButton jButtonOpen;
private JButton jButtonSave;
private JButton jButtonUndo;
// private JButton jButtonZoomIn;
// private JButton jButtonZoomOut;
private JButton jButtonColor;
private JComboBox jComboBoxZoom;
// private JLabel jLabelBgImage;
// private JMenuBar jMenuBarMain;
// private JMenu jMenuMain;
private JToggleButton jToggleButtonArc;
private JToggleButton jToggleButtonLine;
private JToggleButton jToggleButtonRect;
private JToggleButton jToggleButtonSelect;
private JToolBar jToolBarTools;
private JSVGCanvas jSVGCanvasBackground;
private JSVGScrollPane jSVGScrollPaneBgPane;
private JPanel mainPanel = this;
// TEST: Refactor to CodilireModel
private Point startPoint;
// private SVGGraphics2D svgG2D;
// private SVGDocument myDoc;
// private Dimension size; // = new Dimension(400,400);
// private int action;
//
// private Color color = Color.RED;
//
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]