我正在使用iText 2.1.6,我需要在桌子上精确定位图像,例如:
请注意,图像覆盖了一组特定的行和列,而且它们中的一些部分覆盖 - 它覆盖了第5行到第13行。其中,它部分地覆盖了第5行和第13行,而第8行完全覆盖了第8行。同样,它部分覆盖了C列和D列。
换句话说,我想说图像的左上角应该在C5的单元格中,下面的4pt和C5的左上角的6pt。
我该怎么做?我以为我会将文本添加到表中,将表添加到Document中,然后查询表以获取行和列的绝对位置,然后将图像添加到该位置的Document,也许直接内容模式。
但是表格可能会分页,因为它可能有数百行。在这种情况下,我需要将图像添加到正确的页面和正确的位置。
有推荐的方法吗?感谢。
答案 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
图像和坐标。