PDFium Delphi Component Docs

CharacterGenerated Свойство

Компонент: TPdf  ·  Модуль: PDFium
Возвращает True, когда символ по указанному индексу был синтезирован PDFium во время извлечения текста, а не был явно нарисован потоком содержимого страницы. Синтетические символы создаются для развёртки лигатур, мягкого переноса и эвристик границ слова или строки, чтобы результаты поиска и выбора всего текста выглядели естественно

Syntax

property CharacterGenerated[Index: Integer]: Boolean; // read only

IndexИндекс символа на текущей странице с нуля, в диапазоне от 0 до CharacterCount - 1

Description

CharacterGenerated возвращает True, когда символ по указанному индексу порождён самим PDFium, а не присутствовал в исходном content stream. Типичные примеры: разложение лигатур (глиф лигатуры fi разбивается на f + i), замыкающий пробел, который PDFium вставляет между визуально разделёнными соседними текстовыми прогонами, и символы переноса строки, добавляемые в конец каждой визуальной строки

У сгенерированных символов нет собственной отрисовки в content stream страницы, поэтому их габаритные боксы выводятся из соседних глифов. Если нужен пиксельно точный hit-testing, относитесь к их позиции на странице осторожно: CharacterRectangle может схлопнуться в область нулевой ширины или высоты

Для задач вроде точного дословного извлечения (цифровые подписи, хэширование текста, ASCII-точное сравнение с content stream страницы) сначала отфильтруйте сгенерированные символы. Для обычного поиска по тексту и копирования в буфер флаг чисто информационный — PDFium уже вставил эти символы, потому что пользователи их ожидают

Remarks

Example

// Build a verbatim string that contains only characters from the content stream
var
  I: Integer;
  S: WString;
begin
  S := '';
  for I := 0 to Pdf.CharacterCount - 1 do
    if not Pdf.CharacterGenerated[I] then
      S := S + Pdf.Character[I];
  Memo1.Text := S;
end;

See Also

Character, CharacterIsHyphen, CharacterMapError, CharacterRectangle, Text