Пожалуйста, взгляните на пример 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», чтобы показать вам, что все строки, кроме последнего, действительно оправдано.
Update:
В комментарии, вы утверждаете, что выравнивание является неправильным, когда вы вводите \
характер, и вы хотите, чтобы я исправить 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
. Во втором случае я вводил символ новой строки. Результат был таким, как ожидалось: был введен символ новой строки, и последняя строка каждого «параграфа», которая была определена символом новой строки, действительно не была оправдана. Это то, чего обычно можно ожидать. Я бы ввел ошибку, если бы я это изменил.
Это снимок экрана результата:
Введение '\'
характера в линиях с "a b c align "
не оказывает никакого влияния на выравнивание. Внедрение новой строки наполовину часть "supercalifragilisticexpialidocious "
разбивает элемент списка на две части. Конечная строка каждой части не является оправданной, то есть желаемое поведение.
Если вы не хотите этого поведения, сначала необходимо проанализировать содержимое и удалить все символы новой строки (возврат каретки и подача строки).
Update:
В новом комментарии, вы упоминаете характер '\'
как экранирующий символ для '''
характера (на самом деле \'
характера). Я адаптировал оригинальный пример еще раз:
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
с escape-символами. В этом случае символ '\''
был жестко запрограммирован. Если вы получите String
из базы данных, и вы неправильно это прочитали String
, то вы можете получить странные результаты. Особенно с моих дней как разработчик PHP, я помню экземпляры, в которых одна цитата заканчивалась тем, что она хранилась в этом '\\\''
в базе данных, если вы не следили.
Есть вопрос. Проблема возникает, когда у вас есть символ «\» в содержимом элемента списка. Бруно, можете ли вы любезно предложить решение? – naw
@BrunoLowagie: Прекратите думать, что iText специально нацелен на тенденцию пользователей *, в которой все больше и больше людей публикуют вопросы, говорящие, что что-то не работает в iText "*. - Будьте в курсе того, что пользователи с проблемой действительно говорят об этом в отношении *** ALL *** программного обеспечения, которое они используют :-) - iText важен (для вас и для многих его пользователей), но он не является центром вселенной, которую можно выбрать для обвинения. –