Исправление позиционирования изображения в iTextSharp - PullRequest
1 голос
/ 12 ноября 2011

Как пройти по элементам в документе itextsharp и изменить их после того, как они были созданы?В частности, я хотел бы найти элементы изображения в своем документе и изменить атрибут выравнивания изображения.


Вот сценарий, чтобы избежать неизбежного, черт возьми, вы пытаетесь сделать эти сообщения -

У меня есть приложение с очень сложными динамическими контрактами.Я написал класс, который позволяет определять контракт в xml с переменными, условными блоками, циклами и «функциями», чтобы упростить определение логики контракта.Мой код преобразует динамические элементы в XML-документ, который может быть проанализирован с помощью itextsharp xmlparser.

Это работает хорошо, за исключением флажков.Похоже, что встроенные шрифты не содержат глифа флажка, и, насколько я могу судить, единственный способ заставить их появиться - это включить их в виде изображений.Это работает, но у меня очень ограниченный контроль над свойствами отображения, настройка выравнивания в xml ничего не делает - она ​​всегда отображается с переводом текста на следующую строку.

Единственное, что я могу придумать, чтобы решить проблему, - это просмотреть документ после его создания и задним числом исправить выравнивание изображения из кода, где у меня больше контроля.Есть идеи?

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Один из способов обойти разрыв строки - это обернуть изображение в чанк:

Paragraph p = new Paragraph();
p.Add(new Phrase("Test "));
p.Add(new Chunk(image, 0, 0));
p.Add(new Phrase(" end."));
document.Add(p);

Протестировано с 5.1.2.0. Создайте объект Image один раз, прежде чем помещать его в блок, чтобы он снова использовался.

1 голос
/ 14 ноября 2011

Вам нужен только флажок или флажок с флажком внутри него? Если только флажок, то вы можете использовать встроенный ZAPFDINGBATS шрифт и символ 113:

int CheckBoxChar = 113;
Font ZapfFont = FontFactory.GetFont(BaseFont.ZAPFDINGBATS, 20);
Chunk C = new Chunk((char)CheckBoxChar, ZapfFont);
Paragraph P = new Paragraph();
P.Add(C);
...