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);