#c# #.net #pdf #itextsharp
#c# #.net #PDF #itext
Вопрос:
Как я могу пошагово просматривать элементы в документе itextsharp и изменять их после того, как они были созданы? В частности, я хотел бы найти элементы изображения в моем документе и изменить атрибут выравнивания изображения.
Вот сценарий, позволяющий предотвратить неизбежное, какого черта вы пытаетесь сделать это posts —
У меня есть приложение с некоторыми чрезвычайно сложными динамическими контрактами. Я написал класс, который позволяет определять контракт в xml с помощью переменных, условных блоков, циклов и «функций», чтобы упростить определение логики контракта. Мой код преобразует динамические элементы в XML-документ, который может быть проанализирован с помощью xmlparser itextsharp.
Это работает хорошо, за исключением флажков. Похоже, что встроенные шрифты не содержат глифа флажка, и, насколько я могу судить, единственный способ заставить их отображаться — включить их в качестве изображений. Это работает, но у меня очень ограниченный контроль над свойствами отображения, настройка выравнивания в xml ничего не дает — он всегда отображается с переходом текста на следующую строку.
Единственное, что я могу придумать для решения проблемы, — это просмотреть документ после его создания и задним числом исправить выравнивание изображения из кода, где у меня больше контроля. Есть идеи?
Ответ №1:
Вам нужен просто флажок или флажок с галочкой внутри него? Если просто флажок, то вы можете использовать встроенный 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);
Ответ №2:
Один из способов обойти разрыв строки — обернуть изображение в фрагмент:
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 один раз, прежде чем переносить его в фрагмент, чтобы он использовался повторно.