Нативные rich-text поля

SetRichTextFieldValueWithAppearance записывает согласованные значения: обычный текст V, канонический XHTML RV, флаг поля RichText и реальные appearances для каждого существующего виджета

Каждый run несёт текст Unicode, стиль шрифта, положительный размер в пунктах, цвет RGB, опциональные подчёркивание или зачёркивание, разрывы абзацев и выравнивание влево, по центру или вправо; четыре шрифта стилей — переданные вызывающим кодом программы Unicode TrueType, к ним применяются обычные проверки редактирования и встраивания

По умолчанию runs используют стиль 12pt, обычное начертание и чёрный цвет; выравнивание абзаца берётся из его первого run'а и по умолчанию — влево

Appearance строится на реально встроенных шрифтах стилей, отображениях глифов и измеренных фрагментах слов с общей базовой линией строки; повторяющиеся фрагменты внутри виджета используют одну и ту же программу шрифта стиля

Явные разрывы CR, LF, CRLF, NEL, LINE SEPARATOR и PARAGRAPH SEPARATOR, как и переходы между абзацами, требуют многострочного поля; измеренный перенос строк, повороты виджета и отсечение работают с реальным прямоугольником виджета

Обновление через typed runs может включить rich text в обычном текстовом поле, тогда как комбинации с password, file-select и comb отвергаются ещё до внесения изменений

Read-only, MaxLen, политики для аутентифицированных подписанных документов, разрешения form-fill в зашифрованных документах, отмена и бюджеты на объекты, шрифты, глифы и вывод продолжают действовать

Все rich-обновления готовят переопределения V, RV, Ff и AP до изменения документа; сохранённые строки и потоки несут исходную политику AES-256 R5 или R6

У массивов стилей, строк раскладки и отрисованных фрагментов потолок в 4096 элементов у каждого сверх настроенных лимитов документа; байты шрифтов стилей списываются суммарно

Обычные вызовы SetTextFieldValueWithAppearance для существующего rich-поля заменяют содержимое заданным простым стилем и синхронизируют RV; вызовы SetTextFieldValue, меняющие только значение, тоже синхронизируют RV и сохраняют NeedAppearances=true

GetRichTextFieldValue читает реально сохранённую строку XHTML или текстовый поток UTF-8, включая унаследованные значения

Выравнивание абзаца выбирает его первый run, даже если текст этого run пуст; изменения стиля внутри строки и явные разрывы строк сохраняют выравнивание абзаца

Слишком широкие слова в переносящих многострочных полях разбиваются по границам расширенных графем Unicode 17 с сохранением комбинируемых последовательностей, дополнительных скаляров, emoji-последовательностей и исходного текста V/RV; неделимый кластер шире поля остаётся целым и обрезается

Границы прямоугольника и круга рисуются до отсечения содержимого, а выделенные строки многострочного поля получают реальные синие фоны с учётом измеренных ascent, descent и интервала каждой rich-строки

Нативный JSON ABI

{"schemaVersion":1,"type":"forms.fill","fields":[
  {"name":"Input","fontFamily":"DejaVu Sans Mono","richTextRuns":[
    {"text":"Regular Unicode text "},
    {"text":"Bold red text","fontStyle":"bold","fontSize":20,"color":[1,0,0]},
    {"text":"Next paragraph","fontStyle":"italic","paragraphBreakBefore":true,
     "alignment":"center","underline":true}
  ]}
]}

richTextRuns — массив объектов с обязательным text и опциональными fontStyle, fontSize, color, underline, strikeOut, paragraphBreakBefore и alignment; fontStyle принимает regular, bold, italic или boldItalic

Опциональные массивы fontFamilies выбирают реальные именованные шрифтовые программы для каждого run через fontFamily; массив на уровне редактирования переопределяет массив на уровне операции, а при отсутствии метки run берётся первое семейство

Если у run нет fontSize, берётся fontSize операции поля (когда он положительный), иначе 12; опциональное value должно точно совпадать с обычным текстом, полученным из runs, с возвратом каретки между явными абзацами

Стилизованные runs требуют appearance=true; forms.read возвращает реально сохранённый XHTML в richText для rich-поля

ABI сохраняет прежнюю структуру операции и готовит полный бинарный вывод и результат до фиксации нового загруженного контекста; при неудачной записи или отмене поле остаётся прежним

Приёмочные тесты и оставшаяся работа

Tests/Linux/Run-HeadlessRichTextAcceptance.sh и Tests/Linux/HotPDFHeadlessRichTextTests.pas прогоняют реально сохранённые PDF; Verify-HeadlessRichText.py независимо проверяет XHTML, значения, четыре реальные шрифтовые программы, карты глифов, пути отрисовки декораций и видимые пиксели виджета

Этот API принимает typed runs и на полных абзацах использует стандартные точки разрыва Unicode 17, сохраняя группы слов, неразрывных пробелов, пунктуации и цифр при смене стиля; группы, помещающиеся на свежую строку, переносятся целиком с реальными метриками их стилевых шрифтов

Перенос групп стилей также удерживает общие базовые линии для смешанных кеглей и склеивает CRLF через стыки стилей как в реальной раскладке, так и в каноническом XHTML

Укладка графем между стилями относит целые слишком широкие логические кластеры на одну физическую строку, сохраняя реальные фрагменты шрифта, цвета и размера и прежнее поведение отсечения для неделимого кластера шире прямоугольника

Контекстное соединение использует окружающий текст Unicode, и каждая реальная физическая строка сохраняет направление абзаца, упорядочивая смешанные bidi- и скриптовые элементы между typed-стилями

Диакритика между стилями использует настоящие GPOS-привязки для реальных базовых, лигатурных и предшествующих mark-глифов, сохраняя шрифт, кегль и цвет каждого стиля и видимые выступы глифов

Обмен Rich FDF и XFDF декодирует поддерживаемый ограниченный профиль XHTML-стилей в реальные встроенные шрифты и сохранённые appearances

Явные directional embeddings, overrides, isolates и контекст парных скобок переживают автоматический перенос между typed-стилями; один общий логический порядок абзаца даёт независимое переупорядочивание физических строк и нативный контекстный шейпинг глифов

Кластеры только из Unicode-символов направления сохраняют исходное логическое значение и текст выделения, не расходуя межзнаковый интервал; видимые кластеры и обычные пробелы сохраняют свои настроенные ширины (advances)

Порядок строк из абзаца и кэшированное переупорядочивание строк сохраняют полные границы скаляров UTF-16 и сбрасывают концевые пробелы физической строки, не трогая общую запись абзаца

Именованные семейства шрифтов дают явный выбор для typed-run и ограниченного XHTML с реальными шрифтами семейств, независимыми метриками и импортом форм с учётом семейств

Произвольные XHTML и CSS, fallback на уровне отдельного глифа, таблицы стилей и общая раскладка остаются в активной разработке

Поведение нативных rich-text полей · API документов

Поведение нативных rich-text полей · Документный API