0

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

1 に答える 1