ALIGN_JUSTIFIED 用于 iText 列表项

ALIGN_JUSTIFIED for iText list item

我想通过编写此代码来设置列表项的对齐方式 -

ListItem alignJustifiedListItem =
    new ListItem(bundle.getString(PrintKeys.AckProcess), normalFont8);
alignJustifiedListItem.setAlignment(Element.ALIGN_JUSTIFIED);

我看到这不会对对齐方式进行任何更改(默认为左对齐)。将其更改为 alignJustifiedListItem.setAlignment(Element.ALIGN_JUSTIFIED_ALL); 实际上有效,但内容的最后一行也会扩展(也如文档中所述)

我不明白什么时候 ListItem 扩展 ParagraphsetAlignment() 行为会如何改变。我也没有看到任何覆盖。

请查看 ListAlignment 示例。

在此示例中,我创建了一个包含三个列表项的列表,我将其对齐方式设置为 ALIGN_JUSTIFIED:

List list = new List(List.UNORDERED);
ListItem item = new ListItem(text);
item.setAlignment(Element.ALIGN_JUSTIFIED);
list.add(item);
text = "a b c align ";
for (int i = 0; i < 5; i++) {
    text = text + text;
}
item = new ListItem(text);
item.setAlignment(Element.ALIGN_JUSTIFIED);
list.add(item);
text = "supercalifragilisticexpialidocious ";
for (int i = 0; i < 3; i++) {
    text = text + text;
}
item = new ListItem(text);
item.setAlignment(Element.ALIGN_JUSTIFIED);
list.add(item);
document.add(list);

如果您查看结果,您会发现对齐按预期工作:

我特意引入了一个很长的词,比如"supercalifragilisticexpialidocious",让你知道除了最后一行之外的所有行都是合理的。

更新:

在评论中,您在引入 \ 字符时声称对齐错误,并希望我修复 iText。但是,没有什么可以解决的。

我把原来的例子改编成这样:

text = "a b c align ";
for (int i = 0; i < 5; i++) {
    text = text + "\" + text;
}
item = new ListItem(text);
item.setAlignment(Element.ALIGN_JUSTIFIED);
list.add(item);
text = "supercalifragilisticexpialidocious ";
text = text + text;
text = text + text;
text = text + "\n" + text;
item = new ListItem(text);
item.setAlignment(Element.ALIGN_JUSTIFIED);
list.add(item);

在第一种情况下,我引入了\这个字符。这并没有改变 ListItem 的行为。在第二种情况下,我引入了一个换行符。结果和预想的一样:引入了换行符,换行符定义的每个"paragraph"的最后一行确实不合理。这是人们通常所期望的。如果我要更改它,我会引入一个错误。

这是结果的屏幕截图:

"a b c align " 行中引入 '\' 字符对对齐没有任何影响。在 "supercalifragilisticexpialidocious " 部分中间引入换行符将列表项分成两部分。每个部分的最后一行都没有对齐,这是期望的行为

如果您不希望出现这种行为,则必须先解析内容并删除所有换行符(回车符 return 和换行符)。

更新:

在新评论中,您提到 '\' 字符作为 ''' 字符(实际上是 \' 字符)的转义字符。我再次改编了原来的例子:

text = "a b c\' align ";
for (int i = 0; i < 5; i++) {
    text = text + text;
}
item = new ListItem(text);
item.setAlignment(Element.ALIGN_JUSTIFIED);
list.add(item);

结果如下所示:

文本正确对齐。但是,我可以想象,如果您不正确地处理带有转义字符的 String,就会出现问题。在这种情况下,'\'' 字符被硬编码。如果您从数据库中获取 String 而您读取的 String 不正确,那么您可能会得到奇怪的结果。特别是在我作为 PHP 开发人员的日子里,我记得如果你不注意的话,单引号最终会像这样 '\\'' 存储在数据库中。