THotPDF.PreviewLoadedPageTextReplacement Method

Готовит замещающий текст со встроенными шрифтами Unicode, замеряет каждое совпадение и возвращает проверяемый план, не изменяя загруженный документ

function PreviewLoadedPageTextReplacement(PageIndex: Integer;
  const Needle, Replacement: UnicodeString; MatchCase: Boolean;
  const Options: THPDFLoadedTextReplacementOptions;
  out Plan: THPDFLoadedTextReplacementPlan): Boolean;

Опции и результаты

THPDFLoadedTextReplacementOptions.Default использует Arial, исходный размер шрифта совпадения, его измеренную ширину и высоту в 1.25 раза больше этого размера, с включённым атомарным отклонением

Appearance выбирает шрифт, стиль, цвет, выравнивание и отступы; UseMatchFontSize=False берёт запрошенный размер, а положительные BoxWidth и BoxHeight задают явную рамку для переноса

Appearance.OverflowPolicy выбирает ltopReject, ltopClip или ltopShrinkToFit; обрезка оставляет только помещающийся текст продюсера, а shrink-to-fit останавливается на MinFontSize

THPDFLoadedTextReplacementPlan несёт запрос, опции, отпечаток источника, счётчики и массив THPDFLoadedTextReplacementResults

Каждая THPDFLoadedTextReplacementResult сообщает индексы глифов, исходную позицию, размеры рамки, фактический размер шрифта и значение THPDFLoadedTextReplacementStatus: ltrsReady, ltrsApplied, ltrsRejected или ltrsRolledBack, с причиной отклонения или отката

MaxMatches, MaxGlyphs, MaxContentTokens, MaxContentBytes, MaxGeneratedBytes и лимит текста внешнего вида ограничивают разбор источника, вывод и копируемые шрифтовые ресурсы

Геометрия и атомарность

Сгенерированная замена использует цепочки fallback-шрифтов документа, ShapingFeatures, переключатели auto-shaping по скрипту и выборы скрипта и языка GSUB; настройте это до предпросмотра и держите те же настройки при применении плана

Каждый внешний вид замены ограничивает различные выборки shaping-шрифтов 256, а суммарные сырые шрифтовые данные — 64 MiB, сверх бюджетов разбора запроса и генерируемого вывода

Замена переключает шрифты внутри исходного текстового stream, сохраняет окружающий текст доступным для поиска и восстанавливает исходные матрицы pen и line, поэтому последующие глифы и переходы строк сохраняют свои позиции

Поддерживается прямой текст страницы с горизонтальной невырожденной геометрией, включая преобразования страницы, масштабирование текста, rise, TJ, операторы одиночной/двойной кавычки и совпадения через смежные операнды на одной базовой линии

Отклоняются совпадения через несколько базовых линий, вертикальное письмо, вырожденные преобразования, несбалансированное содержимое, отсутствующие глифы и документы с полями подписи; текст внутри Form XObject вне области совпадений этого API

С Atomic=True любое отклонённое совпадение откатывает все готовые; с Atomic=False готовые совпадения могут примениться, пока отклонённые остаются неизменными, а булев результат остаётся False, если хотя бы одно совпадение отклонено

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

Фиксация

Передайте план в ApplyLoadedPageTextReplacement, чтобы повторно валидировать его отпечаток содержимого и глифовых метрик перед применением запроса в транзакции графа объектов

Пересчитывайте план после изменения содержимого; устаревший план бросает EInvalidOpException, не применяя свои замены

Options := THPDFLoadedTextReplacementOptions.Default;
Options.Appearance.OverflowPolicy := ltopShrinkToFit;
if PDF.PreviewLoadedPageTextReplacement(0, 'Original', NewText,
  True, Options, Plan) then
  if PDF.ApplyLoadedPageTextReplacement(Plan, Applied) then
    PDF.SaveLoadedDocument(TargetPath);