Документация PDFiumPas

CharacterMapError Свойство

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

Синтаксис

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

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

Описание

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

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

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

Примечания

Пример

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;

См. также

Character, Charcode, CharacterGenerated, CharacterCount, Text