Я пытаюсь программно читать в XML-файле, созданном draw.io, онлайн-службой создания диаграммы/диаграммы. Draw.io построен с использованием mxGraph по своему ядру, который недавно был извне назван jgraphx (таким образом, тег на этом посту), хотя имена классов остались прежними.Рендеринг XML из draw.io как изображение с помощью mxCellRenderer
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 как изображение в текущем рабочем каталоге. Вместо этого, однако, ничего не происходит, и изображение не создается.
Неужели кто-нибудь когда-либо испытывал подобное? Я что-то пропускаю? Есть ли лучший способ сделать то, что я пытаюсь сделать? Любая помощь будет оценена по достоинству.
FYI, here is a Pastebin с образцом XML-файла на случай, если вы хотите попробовать его сами.
Чтобы уточнить, mxGraph и JGraphX - это разные вещи. mxGraph - это библиотека JavaScript, на которой построена draw.io, JGraphX - это библиотека Java Swing, различные кодовые базы. – David
Дэвид, вы правы, однако даже в библиотеке JGraphX классы все еще называются mxGraphXYZ, где XYZ - это имя класса. К сожалению, немного ненужной путаницы. –