我正在尝试以编程方式读取由在线流程图/图表创建服务 draw.io 生成的 XML 文件。Draw.io 的核心是使用 mxGraph 构建的,它最近被外部命名为 jgraphx(因此是本文中的标签),尽管类名保持不变。
这篇 StackOverflow 帖子展示了如何从文件中读取原始 XML 数据并将其转换为 mxGraph 对象,并且mxGraph Javadocs 的这个页面描述了如何从 mxGraph 对象转换为可渲染图像。
然而,对我来说不幸的是,尽管遵循了这两个指南,“渲染”的图像始终为 null 并且IllegalArgumentException
被抛出(因为图像为 null)。我的代码如下:
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 对象呈现为当前工作目录中的图像。然而,相反,什么也没有发生,也没有创建图像。
有没有人经历过这样的事情?我忽略了什么吗?有没有更好的方法来做我想做的事情?任何帮助,将不胜感激。
仅供参考,这是一个带有示例 XML 文件的 Pastebin,以供您自己尝试使用。