我正在尝试使用 iText 库将 JUNG 网络输出到 PDF。
许多解决方案似乎在使用库捕获屏幕并将其输出为某种格式(例如 EPS)之前在框架中显示图形。但是,我的应用程序会自动构建许多网络并输出它们,因此在保存到文件之前在屏幕上显示每个网络并不是一个很好的解决方案。
我已经进行了一些搜索,但并没有完全找到我在做什么。将图形输出到 PNG 似乎很简单(请参阅此处),但 PNG 的质量不适合我的需要。
我当前的代码如下,基于将图表从 JFreeChart 写入 PDF(参见此处)。我正在尝试获取一个 Graphics2D 对象,我可以将图形“绘制”到该对象上,然后输出到 PDF。此代码生成空指针异常,因为从 visualise.getGraphics() 返回的图形对象为空。
任何建议、代码片段或在线示例将不胜感激。
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();
}