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

Jam*_*ant 10 mxgraph draw.io

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

这篇StackOverflow文章展示了如何从文件中读取原始XML数据并将其转换为mxGraph对象,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();
}
Run Code Online (Sandbox Code Playgroud)

如您所见,此代码应读入XML数据,从该数据创建mxGraph对象,然后将mxGraph对象呈现为当前工作目录中的图像.但是,没有任何反应,也没有创建图像.

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

仅供参考,这里是一个带有示例XML文件的Pastebin,以防您想亲自试用.

Jam*_*ant 13

在draw.io支持人员的帮助下,我找到了答案:XML是混淆的,是的,但不是无法挽回的.它只是压缩而需要解压缩.为此:

  1. 网址解码
  2. 膨胀
  3. Base64解码

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

一旦我获得了解压缩的XML,我的代码就完美运行并生成了预期的输出.