iText ライブラリを使用して JUNG ネットワークを PDF に出力しようとしています。
多くのソリューションは、ライブラリを使用して画面をキャプチャし、これを EPS などの形式に出力する前に、グラフをフレームに表示するようです。ただし、私のアプリケーションは自動的に多くのネットワークを構築して出力するため、ファイルに保存する前に各ネットワークを画面に表示することは適切な解決策ではありません。
私はいくつかの検索を行いましたが、私が何をしているのか正確にはわかりません。グラフを PNG に出力するのは簡単に思えますが (こちらを参照)、PNG の品質は私のニーズには適していません。
私の現在のコードは以下で、JFreeChart から PDF へのチャートの書き込みに基づいています (こちらを参照)。グラフを「描画」してから PDF に出力できる Graphics2D オブジェクトを取得しようとしています。このコードは、visualise.getGraphics() から返されたグラフィックス オブジェクトが null であるため、null ポインター例外を生成します。
アドバイス、コードスニペット、またはオンラインの例をいただければ幸いです。
public void write() throws IOException, DocumentException {
// Open the PDF file for writing
this.document = new Document();
this.writer = PdfWriter.getInstance(this.document, new FileOutputStream(this.fileName));
document.open();
PdfContentByte contentByte = writer.getDirectContent();
PdfTemplate template = contentByte.createTemplate(WIDTH, HEIGHT);
//Graphics2D graphics2d = template.createGraphics(WIDTH, HEIGHT, new DefaultFontMapper());
// Apply a layout to the graph
Layout<Vertex, Edge> layout = new CircleLayout<Vertex, Edge>(this.network);
layout.setSize(new Dimension(WIDTH, HEIGHT));
// Draw on the graphics 2D object
VisualizationImageServer<Vertex, Edge> visualise = new VisualizationImageServer<Vertex, Edge>(layout, new Dimension(WIDTH, HEIGHT));
visualise.setPreferredSize(new Dimension(WIDTH + 50, HEIGHT + 50));
visualise.setDoubleBuffered(false);
Graphics2D graphics2d = (Graphics2D) visualise.getGraphics();
visualise.paintComponents(graphics2d);
graphics2d.dispose();
contentByte.addTemplate(template, 0, 0);
this.document.close();
}