使用iText时,您可以将背景图像设置为PdfPTable

时间:2009-11-09 08:02:22

标签: java itext

我正在使用iText为数据库中的数据生成Pdf报告...

pdfs页面的标题是一个动态添加图像的图像,例如生成日期...

任何人都知道我们是否可以在itext中将背景图像设置为PdfPTable类型的表。

由于

2 个答案:

答案 0 :(得分:4)

我知道它很晚但可能会帮助别人。这是实现它的方法。

创建一个BGClass类,实现PdfPCellEvent并输入以下方法。

@Override
    public void cellLayout(PdfPCell arg0, Rectangle arg1, PdfContentByte[] arg2) {
        try {
            PdfContentByte pdfContentByte = arg2[PdfPTable.BACKGROUNDCANVAS];
            Image bgImage = Image.getInstance("URL_TO_YOUR_IMAGE");
            pdfContentByte.addImage(bgImage, arg1.getWidth(), 0, 0, arg1
                    .getHeight(), arg1.getLeft(), arg1.getBottom());

        } catch (BadElementException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

在您创建PDF的主类中,pdfpCell.setCellEvent(new BGClass());其中pdfpCell是您想要背景图像的单元格。

答案 1 :(得分:0)

Prabhat的技术有一两个缺陷。

  1. 图像的副本将添加到每个单元格的PDF中。将返回的Image存储在cellLayout调用之间,这样您就只有一个副本。如果你有一个10x10的表和一个10kb的图像,你在PDF中占用1mb而不是10kb。哎哟。它实际上比所有这些额外对象的额外开销更糟糕(不是更糟糕,但可测量)。
  2. 必须平铺图像,每个单元格一个。
  3. 最好使用PdfPTableEvent。请注意,如果您的表跨多个页面,则将为每个表调用一次事件处理程序。 heightswidths参数有点时髦。每个中的第一个值是绝对起始位置。剩下的值确实是高度和宽度。方便,但变量名称有点误导。

    请记住,图像的每个实例都意味着PDF中该图像的另一个副本。尽可能保存并重复使用它们。