property CharacterMapError[Index: Integer]: Boolean; // read only
| Index | Index de caractère de base 0 sur la page courante, dans la plage 0 à CharacterCount - 1 |
CharacterMapError renvoie True lorsque PDFium a rencontré une erreur lors du mappage du caractère à l’index indiqué vers un point de code Unicode. Quand cela vaut True, la valeur renvoyée par Character[Index] n’est pas fiable et retombe souvent sur un caractère de remplacement (#$FFFD) ou sur le passage tel quel de l’identifiant de glyphe sous-jacent
Le drapeau est le plus souvent levé sur des PDF produits par des pilotes d’imprimante et des outils de conversion qui intègrent des sous-ensembles de polices sans ToUnicode CMap correspondante, ou avec une CMap qui ne couvre pas l’ensemble complet des glyphes. Les PDF numérisés avec texte OCR intégré et les PDF qui utilisent des vecteurs d’encodage personnalisés sont des sources typiques d’erreurs de mappage
Les appelants qui doivent faire un aller-retour de texte depuis un PDF doivent filtrer ou annoter les occurrences CharacterMapError avant de les traiter comme contenu recherchable. Un groupe d’erreurs de mappage consécutives indique généralement une séquence de chaîne entière qui devrait être ré-extraite via OCR plutôt que via la couche de texte
True et que la page courante a été analysée ; sinon elle renvoie 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;