3

如何将多个 JfreeCharts 放入一个 pdf 文件中?有很多示例如何将 1 个 JfreeChart 放入 pdf,但我找不到任何有关如何将多个 JfreeChart 放入 1 个 pdf 的示例。

一些 JfreeCharts 应该彼此相邻,而其他 JfreeCharts 应该彼此下方。

4

2 回答 2

3

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

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

另一种选择是将对象包装在PdfTemplate对象中Image,并使用PdfPTable.

于 2012-10-21T13:16:49.467 回答
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
于 2015-01-10T03:12:22.523 回答