SearchAndReplaceTextInContentEx

Извлечение, Unicode, редактирование содержимого

Описание

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

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

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

Синтаксис

Delphi

Function TPDFlib.SearchAndReplaceTextInContentEx(Const Query, Replacement: WideString; Options: TPDFlibSearchOptions; Const PageRange: WideString; ReplacementFontID: Integer): Integer;

DLL

Function DLSearchAndReplaceTextInContentEx(InstanceID: Integer; Query: PWideChar; Replacement: PWideChar; Options: Integer; PageRange: PWideChar; ReplacementFontID: Integer): Integer; Stdcall;
Function DLSearchAndReplaceTextInContentExA(InstanceID: Integer; Query: PAnsiChar; Replacement: PAnsiChar; Options: Integer; PageRange: PAnsiChar; ReplacementFontID: Integer): Integer; Stdcall;

ActiveX

Function PDFlib::SearchAndReplaceTextInContentEx(Query: WideString; Replacement: WideString; Options: Integer; PageRange: WideString; ReplacementFontID: Integer): Integer;

Параметры

ReplacementFontID 0 использует исходный шрифт; положительное значение должно указывать на шрифт выбранного документа с полной проверенной кодировкой

Шрифт замены выбирается только для заменяемых участков, а исходный шрифт восстанавливается перед нетронутыми суффиксами; метод не выбирает и не устанавливает шрифт автоматически

Опции DLL и ActiveX используют флаги поиска как биты 1, 2, 4, 8, 16, 32, 64 и 128 в порядке enum; soAcrossLines — бит 16, здесь он не поддерживается; неизвестные биты отклоняются этими фасадами

Входные строки DLL A используют конфигурацию преобразования ANSI-to-wide экземпляра; чтобы передавать Unicode независимо от этой конфигурации, используйте широкую точку входа

Возвращаемые значения

Возвращает число заменённых совпадений или 0 при их отсутствии либо отклонённом запросе; чтобы различить эти исходы, проверьте GetLastUnicodeReplacementDiagnostics

LastErrorCode 535 сообщает о недопустимом входе или лимитах захвата; 537 — о неподдерживаемом редактировании или кодировке; корректный поиск без совпадений завершается со статусом completed и replacedHits 0

Примечания

Отображения берутся из полностью поддерживаемой ToUnicode CMap или проверенной кодировки простого шрифта, включая поддерживаемые имена глифов Differences; никакое преобразование системных кодовых страниц и никакая угаданная кодировка глифов не используются

Простые шрифты должны давать корректные PDF Widths, FirstChar и LastChar либо точное имя стандартного шрифта Type1 из четырнадцати без Widths; системный резервный шрифт и неточное сопоставление имён не дают права на точное продвижение

Наследование через именованный UseCMap, неразрешённые отображения, продвижения шрифтов Type3, вертикальный текст, вложенный текст Form, синтетические символы, замены ActualText, транскодированные строки, совпадения через границы слоёв и частичные кластеры лигатур сообщаются как неподдерживаемые

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

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

Планирование поддерживает до 4096 совпадений; захваченные снимки источника ограничены 64 МиБ на поток и 512 МиБ суммарно, плюс 64 МиБ записей о расположении в источнике; парсер отображения шрифта также применяет ограниченные лимиты токенов и code-space с суммами по транзакции 262144 отображений и 8 млн единиц UTF-16

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

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

Операция меняет активное содержимое страницы и не является API безопасного стирания: отсоединённые объекты или прежние инкрементальные ревизии могут удерживать исходные байты

См. также

SearchAndReplaceTextInContent, SearchAndReplaceTextInContentEx, GetLastUnicodeReplacementDiagnostics, SearchText