如何对齐标签与其内容?

How to align a label versus its content?

我有一个标签(例如 "A list of stuff")和一些内容(例如一个实际列表)。当我将所有这些添加到 PDF 时,我得到:

A list of stuff: test A, test B, coconut, coconut, watermelons, apple, oranges, many more 
fruites, carshow, monstertrucks thing

我想更改此设置,使内容对齐如下:

A list of stuff: test A, test B, coconut, coconut, watermelons, apple, oranges, many more 
                 fruites, carshow, monstertrucks thing, everything is startting on the
                 same point in the line now

换句话说:我希望内容对齐,以便每一行都从相同的 X 位置开始,无论添加到列表中的项目有多少。

有许多不同的方法可以实现您想要的效果:请看下面的屏幕截图:

此 PDF 是使用 IndentationOptions 示例创建的。

在第一个选项中,我们使用带有标签("A list of stuff: ")的List作为列表符号:

List list = new List();
list.setListSymbol(new Chunk(LABEL));
list.add(CONTENT);
document.add(list);
document.add(Chunk.NEWLINE);

在第二个选项中,我们使用一个段落,其中我们使用 LABEL 的宽度作为缩进,但我们更改第一行的缩进以补偿该缩进。

BaseFont bf = BaseFont.createFont();
Paragraph p = new Paragraph(LABEL + CONTENT, new Font(bf, 12));
float indentation = bf.getWidthPoint(LABEL, 12);
p.setIndentationLeft(indentation);
p.setFirstLineIndent(-indentation);
document.add(p);
document.add(Chunk.NEWLINE);

在第三个选项中,我们使用 table 和定义绝对宽度的列。我们使用之前计算的第一列宽度,但我们添加了 4,因为单元格的默认填充(左右)等于 2。(显然,您可以更改此填充。)

PdfPTable table = new PdfPTable(2);
table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
table.setTotalWidth(new float[]{indentation + 4, 519 - indentation});
table.setLockedWidth(true);
table.addCell(LABEL);
table.addCell(CONTENT);
document.add(table);

可能还有其他方法可以达到相同的效果,您可以随时调整上述选项。哪个选项最适合您的情况由您决定。