property CharacterMapError[Index: Integer]: Boolean; // read only
| Index | Індекс символу з нульовою базою на поточній сторінці, у діапазоні від 0 до CharacterCount - 1 |
CharacterMapError повертає True, коли PDFium зіткнувся з помилкою
зіставлення символу за вказаним індексом із кодовою точкою Unicode. Коли це
True, значення, повернене Character[Index],
є ненадійним і часто звертається до символу заміни (#$FFFD) або
до passthrough базового ідентифікатора гліфа
Прапорець найчастіше підіймається на PDF, створених драйверами принтерів та інструментами конвертації, що вбудовують підмножини шрифтів без відповідного ToUnicode CMap або з CMap, що не покриває повний набір гліфів. Скановані PDF із вбудованим OCR-текстом та PDF, які використовують власні вектори кодування, — типові джерела помилок зіставлення
Виклики, яким потрібно передавати текст із PDF туди й назад, мають
фільтрувати або анотувати попадання CharacterMapError, перш ніж
вважати їх придатним для пошуку вмістом. Кластер послідовних помилок
зіставлення зазвичай вказує на цілий рядковий прогін, який слід витягнути
повторно через OCR, а не через текстовий шар
True і поточну сторінку розібрано; інакше вона повертає False
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;