【发布时间】:2014-06-13 06:46:22
【问题描述】:
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 个表格,我希望它出现在新页面中。所以每个页面都有一个表格和一个图表。
【问题讨论】:
-
为什么要在绝对位置添加图表并添加带有
document.add()的表格?如果我在你的位置,我会将图表添加到表格中。顺便说一句:我将此作为评论添加,而不是作为答案。我不太了解您的问题,无法回答(您的代码很奇怪,您的问题也不清楚)。 -
当我执行此代码时,我得到了 pdf 格式的图表,并且我的表格在图表上重叠了。所以我需要的是表 1,然后是图表。但我都需要在同一页面上。
-
你必须决定,你想控制布局吗?还是应该由 iText 控制它?在您的代码中,您控制条形图的布局 (
cb.addTemplate(bar, 0, heigh)),而 iText 控制表格的布局 (document.add(table))。因此,布局以不协调的方式发生,导致区域重叠。 -
mkl 说的是对的:表格和图表重叠,因为您赌的是两匹马:绝对位置和自动布局。
-
所以如果我不定位它,iText 会自动对齐图表和表格..?即如果我不使用 cb.addTemplate(bar, 0 , heigh) 我会得到预期的结果..?
标签: javafx itext jfreechart