オンラインのフローチャート/図作成サービスである 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を次に示します。