检查文字是否覆盖单元格

时间:2018-09-11 15:07:26

标签: itext7

我需要知道如何检查单元格中的文本是否覆盖了它。如果没有,我想用点覆盖其余空间。

例如,说我有这个:

Paragraph p = new Paragraph("Total:").SetFont(FontRegular).SetFontSize(FontSize);
Cell cell = new Cell();
cell.Add(p);

我说单元格占据整个桌子,或者一半,或者其他。获取单元的宽度很容易。我只是通过表格获取当前列的宽度(我不明白为什么单元格或段落方法的GetWidth返回null ...)。 但是,如何获取该段落占用的宽度?我需要知道要添加任意数量的点以用于格式化。

因为这将通过一些字符串来完成,所以我真的负担不起每次都要手动设置它。我必须要自动。

1 个答案:

答案 0 :(得分:1)

如果轻松获得单元格宽度,则可以使用制表位来用点填充行的其余部分。这是一个辅助方法的示例:

private Cell createCell(String content, float cellWidth) {
    Cell cell = new Cell();
    if (content != null) {
        Paragraph p = new Paragraph(content);
        p.addTabStops(new TabStop(cellWidth, TabAlignment.RIGHT, new DottedLine()));
        p.add(new Tab());
        cell.add(p);
    }
    return cell;
}

它将添加制表位和必要的制表符,以用点填充最后一行的其余部分。

因此,如果我使用这种方法,例如通过以下方式:

Table table = new Table(new float[]{150, 50})
        .addCell(createCell("cell 1, 1", 150))
        .addCell(createCell("cell 1, 2", 50))
        .addCell(createCell("cell 2, 1", 150))
        .addCell(createCell("cell 2, 2", 50))
        .addCell(createCell("cell 3, 1", 150))
        .addCell(createCell(null, 50));
doc.add(table);

结果将类似于以下内容:

Tab stops for filling last line with dots

当然,您可以决定是否用点填充空白单元格,或者将制表位停止位置稍微向左移动,等等,但这应该为您提供一种实现目标的方法。