2015-01-08 4 views
1

Я хочу, чтобы установить выравнивание для элементов списка, написав этот код -ALIGN_JUSTIFIED для IText элемента списка

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

Я вижу это не делает никаких изменений на выравнивание (по умолчанию, как выравнивание по левому краю). Изменение его alignJustifiedListItem.setAlignment(Element.ALIGN_JUSTIFIED_ALL); на самом деле работает, но тогда последняя строка содержания также расширяется (как указано в док, а)

Я не понимаю, когда ListItem расширяет Paragraph, как setAlignment() поведение может измениться. Я тоже не вижу никакого переопределения.

+0

\t com.itextpdf \t itextpdf \t 5.5.4 naw

+0

Есть вопрос. Проблема возникает, когда у вас есть символ «\» в содержимом элемента списка. Бруно, можете ли вы любезно предложить решение? – naw

+0

@BrunoLowagie: Прекратите думать, что iText специально нацелен на тенденцию пользователей *, в которой все больше и больше людей публикуют вопросы, говорящие, что что-то не работает в iText "*. - Будьте в курсе того, что пользователи с проблемой действительно говорят об этом в отношении *** ALL *** программного обеспечения, которое они используют :-) - iText важен (для вас и для многих его пользователей), но он не является центром вселенной, которую можно выбрать для обвинения. –

ответ

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

я намеренно ввел очень длинное слово, как «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. Во втором случае я вводил символ новой строки. Результат был таким, как ожидалось: был введен символ новой строки, и последняя строка каждого «параграфа», которая была определена символом новой строки, действительно не была оправдана. Это то, чего обычно можно ожидать. Я бы ввел ошибку, если бы я это изменил.

Это снимок экрана результата:

enter image description here

Введение '\' характера в линиях с "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); 

Результат выглядит следующим образом:

enter image description here

текст правильно оправданной. Однако я могу представить, что проблемы могут возникнуть, если вы неправильно обработаете String с escape-символами. В этом случае символ '\'' был жестко запрограммирован. Если вы получите String из базы данных, и вы неправильно это прочитали String, то вы можете получить странные результаты. Особенно с моих дней как разработчик PHP, я помню экземпляры, в которых одна цитата заканчивалась тем, что она хранилась в этом '\\\'' в базе данных, если вы не следили.

+0

Привет, Бруно, я никогда не говорил, что последняя строка не оправдана, но с использованием «ALIGN_JUSTIFIED_ALL» последняя строка не оправдалась. И если я использую «ALIGN_JUSTIFIED», весь текст не будет оправдан. Даже я не говорю о своей проблеме с IText, может быть, что-то мне не хватает, на моем конце. Но если я изменяю listitem на абзац, все работает как исключение. – naw

+0

У вас проблема. Проблема возникает, когда у вас есть символ «\» в содержимом элемента списка. Бруно, можете ли вы любезно предложить решение? – naw

+0

Я не понимаю, что нужно решить. Я обновил свой вопрос: (1) доказать, что поведение не меняется при вводе символа '' \ '' и (2), что поведение изменяется, как ожидается, когда вы вводите новую строку. Возможно, я неправильно истолковал ваш вопрос, но если это так, ** вы должны научиться предоставлять SSCCE вместо того, чтобы говорить «это не работает!» ** –

Смежные вопросы