PDFium Delphi Component Docs

CharacterMapError Свойство

Компонент: TPdf  ·  Модуль: PDFium
Возвращает True, когда символ по указанному индексу не удалось сопоставить с допустимой кодовой точкой Unicode. Флаг сообщается для каждого символа извлекателем текста PDFium и помогает определить кодовые точки, которые, вероятно, неверны, потому что исходный шрифт не содержит пригодную ToUnicode CMap или вектор кодирования

Syntax

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

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

Description

CharacterMapError возвращает True, когда PDFium не смог отобразить символ по указанному индексу в Unicode code point. Пока флаг равен True, значение из Character[Index] ненадёжно и часто деградирует до символа замены (#$FFFD) или до прямого прогона лежащего в основе идентификатора глифа

Флаг чаще всего поднимается на PDF от драйверов принтеров и конвертеров, которые встраивают подмножества шрифтов без соответствующей ToUnicode CMap или с CMap, не покрывающей весь набор глифов. Сканированные PDF со встроенным OCR-текстом и PDF с кастомными encoding vectors — типичные источники ошибок отображения

Тем, кому нужно гонять текст из PDF туда-обратно, стоит фильтровать или помечать срабатывания CharacterMapError, прежде чем считать их поисковым контентом. Серия подряд идущих ошибок отображения обычно указывает на целый текстовый прогон, который следует извлечь заново через OCR, а не через текстовый слой

Remarks

Example

var
  I, BadCount: Integer;
begin
  BadCount := 0;
  for I := 0 to Pdf.CharacterCount - 1 do
    if Pdf.CharacterMapError[I] then
    begin
      Memo1.Lines.Add(Format('Map error at %d (charcode $%x)',
        [I, Pdf.Charcode[I]]));
      Inc(BadCount);
    end;
  Caption := Format('%d untranslatable characters on page', [BadCount]);
end;

See Also

Character, Charcode, CharacterGenerated, CharacterCount, Text