如何使用itext将表放在pdf中

时间:2014-06-13 06:46:22

标签: javafx itext jfreechart

 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个表格,我希望它出现在新页面中。所以每个页面都有一个表格和一个图表。

1 个答案:

答案 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个实例的列表。