我正试图以编程的方式读取由draw.io生成的XML文件,draw.io是一个在线流程图/图表创建服务。 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();
}
从这段代码中可以看出,它应该读入XML数据,从该数据创建一个mxGraph对象,然后将该mxGraph对象呈现为当前工作目录中的图像。但是,实际上什么都没有发生,也没有创建任何图像。
有人经历过类似的情况吗?我有没有忽略什么?是否有更好的方式来实现我所尝试做的事情?任何帮助都将不胜感激。
顺便提一下,这里是Pastebin,其中包含一个示例XML文件,以防你想自己尝试。