2016-02-08 4 views
5

Я пытаюсь программно читать в 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-файла на случай, если вы хотите попробовать его сами.

+0

Чтобы уточнить, mxGraph и JGraphX ​​- это разные вещи. mxGraph - это библиотека JavaScript, на которой построена draw.io, JGraphX ​​- это библиотека Java Swing, различные кодовые базы. – David

+0

Дэвид, вы правы, однако даже в библиотеке JGraphX ​​классы все еще называются mxGraphXYZ, где XYZ - это имя класса. К сожалению, немного ненужной путаницы. –

ответ

6

С некоторой помощью ребята, поддерживающей draw.io, я нашел ответ: XML запутан, да, но не безвозвратно. Он просто сжат и нуждается в распаковке. Для этого:

  1. URL расшифровывает
  2. Накачайте
  3. Base64 расшифровывает

Я нашел эту ссылку, которая делает все 3 вышеуказанных шагов в одном махом: https://jgraph.github.io/drawio-tools/tools/convert.html.

Как только у меня был декомпрессированный XML-код, мой код работал отлично и генерировал ожидаемый результат.

+0

Когда я конвертирую в SVG, используя этот метод, большая часть информации о формах теряется. Вы испытывали подобные эффекты? –