Я использую mxGraph введите описание ссылки здесь , чтобы создать редактор диаграмм в моем. net проекте. Но когда я экспортирую диаграмму в png, текст внутри фигур перемещается в другую позицию.
Я получаю: изображение результата
И правильное изображение будет: Ожидаемое изображение
Но если я перезагрузить xml генерируется в редакторе, он создает правильно. Проблема только в том, когда я пытаюсь экспортировать
Код для экспорта:
function exportDiagram2Image() {
var graph = Graph.this_graph;
var bg = '#ffffff';
var scale = 1;
var b = 1;
var format = 'png';
var imgExport = new mxImageExport();
var bounds = graph.getGraphBounds();
var vs = graph.view.scale;
// New image export
var xmlDoc = mxUtils.createXmlDocument();
var root = xmlDoc.createElement('output');
xmlDoc.appendChild(root);
// Renders graph. Offset will be multiplied with state's scale when painting state.
var xmlCanvas = new mxXmlCanvas2D(root);
xmlCanvas.translate(Math.floor((b / scale - bounds.x) / vs), Math.floor((b / scale - bounds.y) / vs));
xmlCanvas.scale(scale / vs);
imgExport.drawState(graph.getView().getState(graph.model.root), xmlCanvas);
// Puts request data together
var w = Math.ceil(bounds.width * scale / vs + 2 * b);
var h = Math.ceil(bounds.height * scale / vs + 2 * b);
var xml = mxUtils.getXml(root);
if (bg != null) {
bg = '&bg=' + bg;
}
new mxXmlRequest('/Export.ashx', 'filename=diagrama.' + format + '&format=' + format +
bg + '&w=' + w + '&h=' + h + '&xml=' + encodeURIComponent(xml)).
simulate(document, '_blank');
}
Export.ashx:
public void ProcessRequest (HttpContext context)
{
string xml = HttpUtility.UrlDecode(context.Request.Params["xml"]);
string width = context.Request.Params["w"];
string height = context.Request.Params["h"];
string bg = context.Request.Params["bg"];
string filename = context.Request.Params["filename"];
string format = context.Request.Params["format"];
if (filename != null)
{
filename = HttpUtility.UrlDecode(filename);
}
if (xml != null && width != null && height != null && bg != null
&& filename != null && format != null)
{
Color? background = (bg != null && !bg.Equals(mxConstants.NONE)) ? ColorTranslator.FromHtml(bg) : (Color?)null;
Image image = mxUtils.CreateImage(int.Parse(width), int.Parse(height), background);
Graphics g = Graphics.FromImage(image);
g.SmoothingMode = SmoothingMode.HighQuality;
mxSaxOutputHandler handler = new mxSaxOutputHandler(new mxGdiCanvas2D(g));
handler.Read(new XmlTextReader(new StringReader(xml)));
if (filename.Length == 0)
{
filename = "export." + format;
}
context.Response.ContentType = "image/" + format;
context.Response.AddHeader("Content-Disposition",
"attachment; filename=" + filename);
MemoryStream memStream = new MemoryStream();
image.Save(memStream, ImageFormat.Png);
memStream.WriteTo(context.Response.OutputStream);
context.Response.StatusCode = 200; /* OK */
}
else
{
context.Response.StatusCode = 400; /* Bad Request */
}
}