Добавление расширенного текста в AcroField в iTextSharp - PullRequest
3 голосов
/ 21 сентября 2009

Мне нужно добавить форматированный текст в поле формы PDF с помощью iTextSharp, и я не могу понять это. Вот как я сейчас настраиваю поля, но некоторые части вставленного текста должны быть выделены жирным шрифтом или иметь другое форматирование.

stamper.AcroFields.SetField("fieldName", "fieldValue")
stamper.FormFlattening = True

Я видел в другом месте , что я должен иметь возможность вставить некоторый xml, который включает информацию о форматировании, но я понятия не имею, как должен выглядеть этот xml.

Вот раздел этой страницы, который заставляет меня поверить, что то, что я хочу, возможно:

Он все еще содержит фактический код XML на поле и читатель не будет сделать это как форматированный текст в штампе PDF.

И рабочий ответ на это:

Чтобы это работало, вам нужно будет позвонить AcroFields.setGenerateAppearances (ложь). Обратите внимание, что старые версии Reader не генерировать внешность.

Как должен выглядеть этот xml или есть другой способ сделать это?

1 Ответ

0 голосов
/ 16 марта 2011

Некоторое время назад я добавил в iText возможность задавать значение расширенного текста поля. Я не добавил никакого кода рендеринга, чтобы поддержать это.

Это означает, что единственный способ увидеть это богатое значение - через средство просмотра PDF, которое его поддерживает (Reader / Acrobat). Чтобы они знали, что им нужно восстановить все поля, вам нужно позвонить acroFields.setGenerateAppearances(false). Это отключает генерацию внешнего вида iText и вместо этого запрашивает, чтобы программа просмотра PDF сделала это за вас.

Если вы хотите сплющенный форматированный текст полностью внутри iText [Sharp], вам придется сделать что-то странное:

  1. Нарисуйте свой форматированный текст на странице PDF в отдельном документе. Размер этой страницы должен соответствовать размеру поля. Сохраните его (поток памяти в порядке).
  2. Добавить новый PushbuttonField, установить LAYOUT_ICON_ONLY. Используйте ту же ограничивающую рамку, что и в исходном текстовом поле. Установите цвет фона кнопки на null (прозрачный).
  3. Создайте PdfImportedPage вашей страницы форматированного текста и установите для этой импортированной страницы новый значок (шаблон) PushbuttonField.
  4. Сглаживание.

Болезненно, но эффективно.

Вы можете сделать # 1 с HTMLWorker и использовать свой исходный форматированный текст / HTML в качестве ввода.

Фактически, вы, вероятно, могли бы стать немного более эффективными, если бы HTMLWorker передавал объект ColumnText для визуализации вашего HTML-кода в том же документе, а не в новом, а затем записать его и прочитать снова. Подберите шаблон PDF из DirectContent любой старой страницы с помощью соответствующего ограничивающего прямоугольника.

Это было бы намного хуже.

...