动态定位使用jfree图表生成的表格和条形图

时间:2012-11-26 07:02:42

标签: itext jfreechart

Hi All Iam使用itextpdf-5.1.0.jar,显示Table(此表中的值是根据输入屏幕中的开始日期和结束日期从数据库中获取的)和上表中值的条形图

问题是我想将条形图放在表格下方,从数据库中提取的值可能会因开始日期和结束日期而异,现在我通过给出一些静态值来定位表和条形图(234,567),如果有大量的值表值并且条形图被覆盖。有没有其他方法可以动态定位表格和条形图。

Document document = new Document(PageSize.A4_LANDSCAPE, 10, 10, 10, 10);
document.open();
document.add(new Paragraph("Batch Report:", FontFactory.getFont(FontFactory.COURIER, 10, Font.BOLD, new CMYKColor(255, 255, 255, 255))));
Paragraph paragraph1 = new Paragraph();
paragraph1.setSpacingBefore(4);
document.add(paragraph1);
PdfPTable table = new PdfPTable(5);
table.setWidthPercentage(100);
PdfPCell c1;

for (BoardBean bean : listHeader) {
addColumn(bean.getID(),c1,table,myColor,btableheadercolor);   
}

将列值添加到表

private void addColumn(String text,PdfPCell c1,PdfPTable dataTable,BaseColor   myColor,BaseColor btablecolumncolor) {
  try {
  final Font tabletdcolor = new Font(Font.FontFamily.HELVETICA, 6, Font.NORMAL, BaseColor.BLACK);
  c1 = new PdfPCell(new Paragraph(text, tabletdcolor));
  cellStyle(c1, myColor, btablecolumncolor);
  dataTable.addCell(c1);
  } catch (Exception ex) {
ex.printStackTrace();
  }
}

生成条形图

JFreeChart reportBarChart = genBatchReportBarChart(listHeader);
PdfTemplate reportTemplate = contentByte.createTemplate(280, 230);
        Graphics2D reportGraphics = reportTemplate.createGraphics(280, 230, new DefaultFontMapper());
Rectangle2D reportRectangle = new Rectangle2D.Double(0, 0, 280, 230);
reportBarChart.draw(reportGraphics, reportRectangle);
reportGraphics.dispose();
contentByte.addTemplate(reportTemplate, 10, height+150);

现在在上面的代码中我修复了条形图的位置,如果数值很低,那么它的好处但是如果它们的数字大则条形图覆盖了表值。根据表值,条形图需要我应该如何实现这一目标。

1 个答案:

答案 0 :(得分:3)

在将表格添加到文档后,您可以询问表格的总高度,并使用该表格高度来决定图表的放置位置。

或者(更容易实现):您可以将PdfTemplate包裹在Image对象中:

Image img = Image.getInstance(reportTemplate);

在您添加表格后立即使用document.add()添加该图片(假设您要使用document.add()添加表格)。