【问题标题】:How to precisely position an image on top of a PdfPTable?如何在 PdfPTable 上精确定位图像?
【发布时间】:2014-02-28 11:45:36
【问题描述】:

我使用的是 iText 2.1.6,我需要在表格上精确定位图像,例如:

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

也就是说,我想说的是图片的左上角应该在C5单元格中,C5左上角的下方4pt和右侧6pt。

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

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

有推荐的方法吗?谢谢。

【问题讨论】:

  • 这很容易通过表格或单元格事件来实现。不幸的是,您使用的是不受支持的 iText 版本。请升级!
  • 再次感谢。我会看看那些。我已经启动了升级过程,但这需要时间。与此同时,我必须使用我拥有的版本。感谢您的帮助。

标签: itext


【解决方案1】:

我编写了一些使用表格事件的示例代码。在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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多