mxgraph - 使用 mxCellRenderer 将 draw.io 中的 XML 渲染为图像

标签 mxgraph draw.io

我正在尝试以编程方式读取由在线流程图/图表创建服务 draw.io 生成的 XML 文件。 Draw.io 是使用 mxGraph 作为其核心构建的,它最近被外部命名为 jgraphx(因此是这篇文章中的标签),尽管类名保持不变。

This StackOverflow post 显示了如何从文件中读取原始 XML 数据并将其转换为 mxGraph 对象,this page of the mxGraph Javadocs 描述了如何将 mxGraph 对象转换为可渲染图像。

然而,对我来说不幸的是,尽管遵循了两个指南,“渲染”的图像始终为空,并且会抛出 IllegalArgumentException(因为图像为空)。我的代码如下:

String xmlFile = "work/test.xml";
String imageFile = "work/test.png";
mxGraph graph = new mxGraph();

try {
    Document doc = mxXmlUtils.parseXml(mxUtils.readFile(xmlFile));
    mxCodec codec = new mxCodec(doc);
    codec.decode(doc.getDocumentElement(), graph.getModel());
} catch (IOException e) {
    e.printStackTrace();
}

RenderedImage image = mxCellRenderer.createBufferedImage(graph, null, 1, \\
    Color.WHITE, false, null);

try {
    ImageIO.write(image, "png", new File(imageFile));
} catch (IOException e) {
    e.printStackTrace();
}

如您所见,此代码应读取 XML 数据,从该数据创建一个 mxGraph 对象,然后将 mxGraph 对象呈现为当前工作目录中的图像。然而,什么也没有发生,也没有创建任何图像。

有没有人经历过这样的事情?我是否忽略了什么?有没有更好的方法来做我想做的事情?任何帮助,将不胜感激。

仅供引用,here is a Pastebin 带有示例 XML 文件,以防您想亲自尝试。

最佳答案

在 draw.io 支持人员的帮助下,我找到了答案:XML 被混淆了,是的,但并非不可挽回。它只是被压缩,需要解压。这样做:

  • Base64 解码
  • 膨胀
  • URL 解码

  • 我发现这个链接一举完成了上述所有 3 个步骤: https://jgraph.github.io/drawio-tools/tools/convert.html

    一旦我有了解压的 XML,我的代码就会完美运行并生成预期的输出。

    请参阅此处的示例实现:
    https://github.com/laingsimon/render-diagram/blob/master/drawio-renderer/src/main/java/com/simonlaing/drawiorenderer/models/DiagramDecoder.java

    关于mxgraph - 使用 mxCellRenderer 将 draw.io 中的 XML 渲染为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35274068/

    相关文章:

    javascript - 如何以编程方式更改 mxCell 值?

    javascript - 如何将自定义形状添加到 mxgraph

    offlineapps - chrome 应用程序中的 draw.io 插件

    draw.io - 是否可以将 Lucidchart 图导出到 json,然后将其导入 draw.io?

    javascript - 使用 IE 10 兼容模式使用 Mxgraph 旋转单元格

    mxgraph - DrawIo mxGraph : Using XmlToSvg loses shapes information

    javascript - 不使用服务器保存和加载 mxGraph 文件

    sql - 使用 Draw.io 生成 SQL/DDL 脚本?

    javascript - 如何以编程方式从 draw.io PNG 中提取 XML 数据

    javascript - 绘图.io : How can I debug unminified js code?