如何在PdfPTable上精确定位图像?

时间:2014-02-28 11:45:36

标签: itext

我正在使用iText 2.1.6,我需要在桌子上精确定位图像,例如:

Precise positioning

请注意,图像覆盖了一组特定的行和列,而且它们中的一些部分覆盖 - 它覆盖了第5行到第13行。其中,它部分地覆盖了第5行和第13行,而第8行完全覆盖了第8行。同样,它部分覆盖了C列和D列。

换句话说,我想说图像的左上角应该在C5的单元格中,下面的4pt和C5的左上角的6pt。

我该怎么做?我以为我会将文本添加到表中,将表添加到Document中,然后查询表以获取行和列的绝对位置,然后将图像添加到该位置的Document,也许直接内容模式。

但是表格可能会分页,因为它可能有数百行。在这种情况下,我需要将图像添加到正确的页面和正确的位置。

有推荐的方法吗?感谢。

1 个答案:

答案 0 :(得分:0)

我编写了一些使用表事件的示例代码。在AddOverlappingImage类中,我们创建一个表并声明一个表事件。此表事件如下所示:

public class ImageContent implements PdfPTableEvent {
    protected Image content;
    public ImageContent(Image content) {
        this.content = content;
    }
    public void tableLayout(PdfPTable table, float[][] widths,
            float[] heights, int headerRows, int rowStart,
            PdfContentByte[] canvases) {
        try {
            PdfContentByte canvas = canvases[PdfPTable.TEXTCANVAS];
            float x = widths[3][1] + 10;
            float y = heights[3] - 10 - content.getScaledHeight();
            content.setAbsolutePosition(x, y);
            canvas.addImage(content);
        } catch (DocumentException e) {
            throw new ExceptionConverter(e);
        }
    }
}

我将Image传递给事件类,在tableLayout()方法中,我将图像添加到第4行和第2列(索引从0开始计数)。

我对单元格位置进行了硬编码。显然,您应该使用一些参数,例如List图像和坐标。