Fallback шрифтов rich-текста по переданным семействам
Установите THPDFHeadlessTextAppearanceOptions.FallbackFontFamilies в True, чтобы разрешать отсутствующие глифы rich-текста из семейств, переданных HPDFBuildHeadlessRichTextFamilyAppearance или SetRichTextFieldValueWithFamilies
По умолчанию False, сохраняя строгий выбор каждого авторского семейства и стиля; текстовый сборщик с одним шрифтом другие семейства не ищет
Options:= THPDFHeadlessTextAppearanceOptions.Default;
Options.FallbackFontFamilies:= True;
Document.SetRichTextFieldValueWithFamilies(FieldIndex, Runs, Families, Options);
Выбор и шейпинг
Resolver использует полные расширенные границы графем Unicode 17 через смежные авторские стилевые run и пустые швы run внутри каждого абзаца; решение по семейству никогда не разрезает суррогатную пару, комбинируемую последовательность, вариационную последовательность или кластер joiner'ов
Когда первый затронутый run передаёт FontFamilyCandidates, его объявленный порядок имеет приоритет, и каждый сконфигурированный кандидат должен покрывать каждую стилизованную часть полной графемы; если никто не подходит, применяются описанные ниже существующие правила fallback по выбранному семейству и переданному массиву
Если выбранные программы покрывают всю графему, их авторские семейства остаются в деле; иначе resolver сначала пробует семейство первого затронутого run, затем переданные семейства в порядке массива, выбирая одно семейство, которое покрывает каждую стилизованную часть полной графемы соответствующей фактической программой regular, bold, italic или bold-italic
Отсутствующие программы стилей пропускаются как кандидаты, а некорректная программа, которую пришлось инспектировать, даёт типизированную ошибку invalid-font; элементы управления раскладки и шейпинга не требуют видимых глифов cmap; графема, не покрытая ни одним переданным семейством, даёт haMissingGlyph
Существующий контекстный шейпинг, двунаправленный порядок, размещение диакритики через границы стилей, перенос, явные разрывы абзацев и поворот виджета применяются к разрешённым appearance-run
Значения и транзакции
Fallback-run существуют только во время подготовки appearance; run вызывающего остаются неизменными, а документ хранит исходное простое значение и авторскую rich-разметку в V и RV
Типизированные размеры в пунктах и RGB-компоненты передаются напрямую в раскладку appearance без реконструкции из сериализованного rich-значения, чьё каноническое текстовое представление имеет собственную точность
Импорты FDF и XFDF с учётом семейств принимают ту же опцию и сохраняют свои существующие контракты неизменяемого источника, подписей, безопасности, семантического no-op и публикации
Границы и зависимости
Агрегированный лимит MaxFontBytes считает каждую программу семейства/стиля, инспектированную во время fallback, включая валидных кандидатов, не попавших в итоговое встраивание; appearance встраивает только выбранные стили
Существующие бюджеты входных UTF-16, глифов, объектов и байтов продолжают действовать, а разрешение может создать не более 4096 стилизованных run; отмена проверяется при выборе шрифтов и скалярном покрытии, а также при раскладке и публикации
Сложный шейпинг сохраняет существующие зависимости HarfBuzz и FriBidi; fallback использует только переданные байты шрифтов — без неявного поиска системных шрифтов, общих алиасов, скачанных шрифтов или скачанных таблиц стилей; явные упорядоченные списки кандидатов шрифтов сохраняют поддерживаемый порядок семейств встроенного CSS
Нативные API семейств открывают эту опцию; JSON именованных семейств в Linux принимает тот же opt-in-флаг и подготавливает фактические программы-кандидаты; загрузка fallback колбэком в Windows остаётся отдельной работой
Приёмка
Шесть нативных целей компилятора каждая проходит 199 проверок по 30 сохранённым PDF и 1098 независимых проверок значений, встроенных шрифтов, глифов, шейпинга, точности, строк и видимых пикселей; фактические subset- и полные программы шрифтов покрывают все четыре стиля, комбинируемые метки через границы стилей, арабское соединение, иврит, дополнительные joiner'ы, упорядоченных кандидатов семейств, AES R5/R6, FDF/XFDF, типизированные бюджеты и восемь выбранных контрольных точек отмены, включая финальную
Свежие интерфейсы C++Builder компилируются для обеих архитектур; подлинные выпущенные доказательства отсутствия глифа и успешное фактическое proof виджетов primary/fallback/primary сохраняются отдельно