【问题标题】:how to place a table in pdf with a itext如何在带有itext的pdf中放置表格
【发布时间】: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


【解决方案1】:

您是一名开发人员,这意味着您应该能够理解给出的答案。例如:当你问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 实例的列表。

【讨论】:

  • 对不起。我是java新手..但分配了一份工作..!所以挣扎了很多..很好。将按照你的建议包装成一个 img.. 非常感谢..
猜你喜欢
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
相关资源
最近更新 更多