2016-02-08 8 views
5

Sto provando a leggere a livello di codice in un file XML generato da draw.io, un servizio di creazione diagrammi di flusso/diagramma online. Draw.io è costruito usando mxGraph al suo interno, che è stato recentemente chiamato esternamente jgraphx (quindi il tag su questo post), sebbene i nomi delle classi siano rimasti gli stessi.Rendering XML da draw.io come immagine utilizzando mxCellRenderer

This StackOverflow post mostra come leggere nei dati XML non elaborati dal file e convertirlo in un oggetto mxGraph e this page of the mxGraph Javadocs descrive come convertire dall'oggetto mxGraph a un'immagine renderable.

Sfortunatamente per me, tuttavia, nonostante entrambe le guide, l'immagine che viene "renderizzata" è sempre nullo e viene generata una IllegalArgumentException (perché l'immagine è nullo). Il mio codice è il seguente:

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(); 
} 

Come si può vedere, questo codice dovrebbe leggere i dati XML, creare un oggetto mxGraph da tali dati, quindi rendere l'oggetto mxGraph come immagine nella cartella di lavoro corrente. Invece, tuttavia, non accade nulla e non viene creata alcuna immagine.

Qualcuno ha mai sperimentato qualcosa del genere? Sto trascurando qualcosa? C'è un modo migliore per fare ciò che sto cercando di fare? Qualsiasi aiuto sarebbe apprezzato.

FYI, here is a Pastebin con un file XML di esempio nel caso in cui si desideri provarlo.

+0

Per chiarire, mxGraph e JGraphX ​​sono cose diverse. mxGraph è la libreria JavaScript su cui è disegnato draw.io, JGraphX ​​è una libreria Java Swing, diverse basi di codice. – David

+0

David, sei corretto, tuttavia anche nella libreria JGraphX ​​le classi si chiamano ancora mxGraphXYZ, dove XYZ è il nome della classe. Un po 'di confusione inutile, sfortunatamente. –

risposta

6

Con l'aiuto del gruppo di supporto draw.io, ho trovato la risposta: l'XML è offuscato, sì, ma non in modo irrecuperabile. È semplicemente compresso e deve essere decompresso. Per farlo:

  1. URL decodifica
  2. Gonfiare
  3. Base64 decodifica

Ho trovato questo link che fa tutti e 3 i passaggi sopra in un colpo solo: https://jgraph.github.io/drawio-tools/tools/convert.html.

Una volta ottenuto il codice XML decompresso, il codice funzionava perfettamente e generava l'output previsto.

+0

Quando converto in SVG con questo metodo, gran parte delle informazioni sulle forme si perdono. Hai avuto effetti simili? –

Problemi correlati