【问题标题】:Can you set a background imaged to a PdfPTable when using iText使用 iText 时可以将背景图像设置为 PdfPTable
【发布时间】:2009-11-09 08:02:22
【问题描述】:

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

pdf 页面的标题是一个图像,图像上动态添加了一些文本,例如生成日期..

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

谢谢

【问题讨论】:

    标签: java itext


    【解决方案1】:

    我知道它很晚,但可能会帮助某人。方法如下。

    创建一个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 是您想要背景图像的单元格。

    【讨论】:

      【解决方案2】:

      Prabhat 的技术有一两个缺陷。

      1. 为每个单元格将图像副本添加到 PDF 中。在 cellLayout 调用之间存储返回的图像,这样您就只有一份副本。如果您有一个 10x10 的表格和一个 10kb 的图像,那么您在 PDF 中占用了 1mb 而不是 10kb。哎哟。而且它实际上比所有这些额外对象的额外开销要差一些(不是差很多,但可以测量)。
      2. 它必须平铺图像,每个单元格一个。

      您最好使用PdfPTableEvent。请注意,如果您的表格跨越多个页面,您的事件处理程序将为每个表格调用一次。 heightswidths 参数有点古怪。每个中的第一个值是绝对起始位置。其余的值实际上是高度和宽度。方便,但变量名称有点误导。

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

      【讨论】:

        猜你喜欢
        • 2013-08-02
        • 1970-01-01
        • 2017-07-31
        • 1970-01-01
        • 2015-01-24
        • 2015-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多