我想绘制两个图表,显示带有标签的堆积条形图,用Java编写PDF文件。我会从Mongodb获取数据以输入图形。怎么做?
答案 0 :(得分: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应该是开源的。
祝你好运!
答案 1 :(得分:2)
您可以使用gnujavaplot。它是一个API,使您可以通过Java调用gnuplot。
答案 2 :(得分:2)
您可以查看JasperReports。它是一个用于生成PDF和其他文件格式报告的Java框架。 它使用JFreeChart库集成了对各种类型图表的支持。
但是,我应该警告你,JasperReports的学习曲线非常陡峭。也许您可以考虑使用JFreeChart与iText的组合,而不是this post中的建议。
答案 3 :(得分:2)
您可以使用任何图表库来生成图表(somme库示例here),然后使用Itext将其添加到PDF中。