public static void writeChartToPDF(int width, int height, String fileName) {
PdfWriter writer = null;
Document document = new Document();
try {
writer = PdfWriter.getInstance(document, new FileOutputStream(
fileName));
document.open();
JFreeChart c= generateBarChart0();
PdfContentByte cb = writer.getDirectContent();
float wid = PageSize.A4.getWidth();
float heigh = PageSize.A4.getHeight() / 2;
PdfTemplate bar = cb.createTemplate(width, height);
Graphics2D g2d1 = new PdfGraphics2D(bar,width, height, new DefaultFontMapper());
Rectangle2D r2d1 = new Rectangle2D.Double(0, 0, width, height);
System.out.println("check 5");
c.draw(g2d1, r2d1);
g2d1.dispose();
cb.addTemplate(bar, 0, heigh);
PdfPTable table = new PdfPTable(3); // 3 columns.
PdfPCell cell1 = new PdfPCell(new Paragraph("Cell 1"));
PdfPCell cell2 = new PdfPCell(new Paragraph("Cell 2"));
PdfPCell cell3 = new PdfPCell(new Paragraph("Cell 3"));
table.addCell(cell1);
table.addCell(cell2);
table.addCell(cell3);
document.add(table);
document.close();
} catch (Exception e) {
e.printStackTrace();
}
document.close();
}
我在这里失踪了什么..?我希望它在第一个显示为表格,然后是条形图。我有近5个图表和5个表格,我希望它出现在新页面中。所以每个页面都有一个表格和一个图表。
答案 0 :(得分:0)
您是开发人员,这意味着您应该能够理解所给出的答案。例如:当您询问jfreechart & itext for adding many number of barcharts时,我回答您可以将PdfTemplate
包裹在图像中:
Image img = Image.getInstance(bar);
document.add(img);
我不高兴你没有接受这个答案,因为这是一个非常好的答案。我对你没有遵循这个建议感到高兴。
在对当前问题的评论中,我要求您做出选择:在绝对位置添加图表和表格,或使用iText进行布局。通过将模板包装在Image
内,使用document.add()
添加该图像然后添加表格,您可以解决问题。
可能更优雅的解决方案是包装
for (PdfTemplate chart : charts) {
PdfPTable table = new PdfPTable(3); // 3 columns.
table.setWidthPercentage(100);
PdfPCell cell = new PdfPCell(Image.getInstance(chart), true);
cell.setColspan(3);
table.addCell(cell);
PdfPCell cell1 = new PdfPCell(new Paragraph("Cell 1"));
PdfPCell cell2 = new PdfPCell(new Paragraph("Cell 2"));
PdfPCell cell3 = new PdfPCell(new Paragraph("Cell 3"));
table.addCell(cell1);
table.addCell(cell2);
table.addCell(cell3);
document.add(table);
document.newPage();
}
在此示例中,charts
可以是PdfTemplate
个实例的列表。