ALIGN_JUSTIFIED用于iText列表项

时间:2015-01-08 16:28:12

标签: pdf itextsharp itext

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

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

我发现这并没有对齐进行任何更改(默认为左对齐)。把它改成 alignJustifiedListItem.setAlignment(Element.ALIGN_JUSTIFIED_ALL);实际上正在运行,但内容的最后一行也会扩展(如文档中所述)

我不明白ListItem何时延伸ParagraphsetAlignment()行为如何变化。我也没有看到任何压倒一切。

1 个答案:

答案 0 :(得分:1)

请查看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);

如果查看结果,可以看到对齐按预期工作:

enter image description here

我故意介绍了一个很长的词,例如&#34; supercalifragilisticexpialidocious&#34;告诉你除了最后一行之外的所有行都是合理的。

<强>更新

在评论中,当您引入\字符时,您声称对齐错误,并且您希望我修复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的行为。在第二种情况下,我介绍一个换行符。结果如预期:引入了换行符,并且每个&#34;段的最后一行都是#34;由换行符定义的确实没有道理。这是人们通常所期望的。如果我改变这个,我会介绍一个错误。

这是结果的屏幕截图:

enter image description here

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

如果您不想要此行为,则必须先解析内容并删除所有换行符(回车符和换行符)。

<强>更新

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

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);

结果如下:

enter image description here

文本是正确的。但是,我可以想象如果使用转义字符错误地处理String s,可能会出现问题。在这种情况下,'\''字符是硬编码的。如果从数据库中获取String并且您错误地读取了String,那么您可能会得到奇怪的结果。特别是在我作为PHP开发人员的日子里,我记得如果你没有注意的话,单个引用最终会像这个'\\\''一样存储在数据库中的实例。