mxGraph теряет форму при экспорте в изображение - PullRequest
0 голосов
/ 26 марта 2020

Я использую 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 */
    }
}
...