jfreechart itext:将多个图表放在一个pdf中

时间:2012-10-21 12:18:42

标签: java itext jfreechart

如何将多个JfreeCharts放入一个pdf中?有很多例子如何将1个JfreeChart放入pdf中,但我找不到任何关于如何将多个JfreeCharts放入1 pdf的内容。

一些JfreeCharts应该彼此相邻,其他人应该低于彼此。

2 个答案:

答案 0 :(得分:3)

我的书中有一个例子:http://itextpdf.com/examples/iia.php?id=262

如您所见,我有两个不同的图表,一个饼图和一个条形图。我将这些图表绘制到PdfTemplate对象。然后,我使用X,Y坐标将模板添加到画布(这允许您将它们彼此相邻或相互下方添加)。

另一种选择是将PdfTemplate个对象包裹在Image个对象中,并使用PdfPTable来定位这些图像。

答案 1 :(得分:0)

根据Lowagie的回答。最好使用PdfPCellEvent接口。

public class JFreeChartEvent implements PdfPCellEvent {
    private JFreeChart chart;

    public JFreeChartEvent(final JFreeChart chart){
        this.chart = chart;
    }

    @Override
    public void cellLayout(PdfPCell arg0, Rectangle arg1, PdfContentByte[] arg2) {
        PdfContentByte cb = arg2[PdfPTable.TEXTCANVAS]; //optional, can be other canvas
        PdfTemplate pie = cb.createTemplate(arg1.getWidth(), arg1.getHeight());
        Graphics2D g2d1 = new PdfGraphics2D(pie, arg1.getWidth(), arg1.getHeight());
        Rectangle2D r2d1 = new Rectangle2D.Double(0, 0, arg1.getWidth(), arg1.getHeight());
        chart.draw(g2d1, r2d1);
        g2d1.dispose();
        cb.addTemplate(pie, arg1.getLeft(), arg1.getBottom());
    }
}

使用PdfPCell时,

PdfPCell cell = new PdfPCell();    
cell.setCellEvent(new JFreeChartEvent(getChart());
cell.setFixedHeight(300.f);   //height must be set if its row's height is not defined yet