Я использую draw2d, jquery, jsp и java.
Я пытаюсь экспортировать svg и сохранить его в файл. Для экспорта я использую этот код:
function loadEmptyCanvas(){
canvas.getCommandStack().addEventListener(function(e){
if(e.isPostChangeEvent()){
displayJSON(canvas);
}
});
var jsonData=new Object();
var writer = new draw2d.io.json.Writer();
writer.marshal(canvas,function(json){
$("#json").text(JSON.stringify(json, null, 2));
alert(jsonData);
var url = "SVGServlet";
$.ajax({
type : "POST",
url : url,
data: {jsonData:JSON.stringify(json, null, 2)},
success : function(data) {
//successfully saved
}
}
});
});
}
function displayJSON(canvas){
var writer = new draw2d.io.json.Writer();
writer.marshal(canvas,function(json){
$("#json").text(JSON.stringify(json, null, 2));
});
Как в этом ответе: { ссылка }
Я получаю экспорт и все, но он не завершен.
Например: я добавляю метки к своим фигурам и соединениям с помощью встроенных функций:
this.label = new draw2d.shape.basic.Label({
text: "some text",
fontColor: "#0d0d0d",
stroke: 0
});
this.add(this.label, new draw2d.layout.locator.CenterLocator());
var show = function() {
this.setVisible(true);
};
После экспорта я получаю что-то вроде этого:
{
"type": "someRect",
"id": "488b32a0-891a-1501-11eb-cc1a2e0a5f2d",
"x": 561.3000030517578,
"y": 152.63333129882812,
"width": 50,
"height": 50,
"alpha": 1,
"angle": 0,
"userData": {},
"cssClass": "someRect",
"ports": [
{
"type": "draw2d.InputPort",
"id": "2cc349c0-f1be-af72-0cb7-133cfe3eb9db",
"width": 10,
"height": 10,
"alpha": 1,
"angle": 0,
"userData": {},
"cssClass": "draw2d_InputPort",
"bgColor": "#4F6870",
"color": "#1B1B1B",
"stroke": 1,
"dasharray": null,
"maxFanOut": 9007199254740991,
"name": "input0",
"port": "draw2d.InputPort",
"locator": "draw2d.layout.locator.InputPortLocator"
},
{
"type": "draw2d.OutputPort",
"id": "0504a043-a3d7-4a25-4991-db072f093387",
"width": 10,
"height": 10,
"alpha": 1,
"angle": 0,
"userData": {},
"cssClass": "draw2d_OutputPort",
"bgColor": "#FF9900",
"color": "#1B1B1B",
"stroke": 1,
"dasharray": null,
"maxFanOut": 9007199254740991,
"name": "output0",
"port": "draw2d.OutputPort",
"locator": "draw2d.layout.locator.OutputPortLocator"
}
],
"bgColor": "#FF9E42",
"color": "#000000",
"stroke": 1,
"radius": 0,
"dasharray": null,
"vertices": [
{
"x": 586.3000030517578,
"y": 152.63333129882812
},
{
"x": 611.3000030517578,
"y": 177.63333129882812
},
{
"x": 586.3000030517578,
"y": 202.63333129882812
},
{
"x": 561.3000030517578,
"y": 177.63333129882812
}
]
}
Но этот прямоугольник имеет метку и должен включать следующий код:
"labels": [
{
"type": "draw2d.shape.basic.Label",
"id": "2d6ec69b-cd3c-f36b-7384-fdb2325e9081",
"x": -35.599998474121094,
"y": 52,
"width": 84.25,
"height": 21,
"alpha": 1,
"angle": 0,
"userData": {},
"cssClass": "draw2d_shape_basic_Label",
"ports": [],
"bgColor": "none",
"color": "#1B1B1B",
"stroke": 1,
"radius": 0,
"dasharray": null,
"text": "some text",
"outlineStroke": 0,
"outlineColor": "none",
"fontSize": 14,
"fontColor": "#080808",
"fontFamily": null,
"locator": "draw2d.layout.locator.CenterLocator"
}
]
Я не уверен, что это так, потому что я не создал пользовательский класс меток, но я не думаю, что он должен быть необходимо.