3

我想将两个显示带有标签的堆叠条形图的图形绘制到 Java 中的 PDF 文件中。我会从 Mongodb 获取数据以输入到图表中。怎么做?

4

4 回答 4

3

使用 JFreechart 和 pdfbox,我做了一些类似于你要求我做一次报告的事情。制作饼图如下:

public class PieChartExample {
    public static void main(String[] args) {
        // Create a simple pie chart
        DefaultPieDataset pieDataset = new DefaultPieDataset();
        pieDataset.setValue("Chrome", new Integer(42));
        pieDataset.setValue("Explorer", new Integer(24));
        pieDataset.setValue("Firefox", new Integer(24));
        pieDataset.setValue("Safari", new Integer(12));
        pieDataset.setValue("Opera", new Integer(8));
        JFreeChart chart = ChartFactory.createPieChart3D(
            "Browser Popularity", // Title
            pieDataset, // Dataset
            true, // Show legend
            true, // Use tooltips
            false // Configure chart to generate URLs?
        );
        try {
            ChartUtilities.saveChartAsJPEG(new File("C:\\Users\\myname\\Desktop\\chart.jpg"), chart, 500, 300);
        } catch (Exception e) {
            System.out.println("Problem occurred creating chart.");
        }
    }
}

上面的示例来自我认为可以在他们的网站上找到的 pdf,如果您需要,它还有其他图表的示例。保存后,我可以将其导入到 pdf 中,类似于:

try {

    PDDocument document = new PDDocument();
    PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
    document.addPage(page); 

    InputStream in = new FileInputStream(new File("c:/users/myname/desktop/chart.jpg"));            
    PDJpeg img = new PDJpeg(document, in);
    PDPageContentStream contentStream = new PDPageContentStream(document, page);
    contentStream.drawImage(img, 10, 300);
    contentStream.close();

    document.save("pathway/to/save.pdf");
} catch (IOException e) {
    System.out.println(e);
} catch (COSVisitorException cos) {
    System.out.println(cos);
}

itext 也是一个很好的 pdf 操作库,但它是商业化的,而 pdfbox 应该是开源的。

祝你好运!

于 2013-10-24T09:41:24.073 回答
2

您可以使用gnujavaplot。它是一个 api,使您能够通过 Java 调用 gnuplot。

于 2013-10-24T09:33:37.073 回答
2

你可以看看JasperReports。它是一个 Java 框架,用于生成 PDF 和其他文件格式的报告。它使用JFreeChart库集成了对各种类型图表的支持。

但是,我应该警告您,JasperReports 的学习曲线非常陡峭。也许您可以考虑使用 JFreeChart 与iText的组合,如本文中所建议的那样

于 2013-10-24T09:34:08.343 回答
2

您可以使用任何图表库来生成图表(这里有一些库示例),然后使用 Itext 将其添加到您的 PDF 中。

于 2013-10-24T09:45:29.667 回答