property CharacterMapError[Index: Integer]: Boolean; // read only
| Index | 0-basierter Zeichenindex auf der aktuellen Seite, im Bereich 0 bis CharacterCount - 1 |
CharacterMapError liefert True, wenn PDFium beim Mapping
des Zeichens am angegebenen Index auf einen Unicode-Codepoint auf einen Fehler gestoßen ist.
Steht das Flag auf True, ist der von Character[Index]
gelieferte Wert unzuverlässig und fällt oft auf ein Ersatzzeichen (#$FFFD)
oder eine Durchreichung des zugrunde liegenden Glyph-Identifiers zurück
Das Flag tritt am häufigsten bei PDFs auf, die Druckertreiber und Konverter erzeugen und die Font-Subsets ohne passende ToUnicode-CMap einbetten — oder mit einer CMap, die nicht den vollständigen Glyphenumfang abdeckt. Gescannte PDFs mit eingebettetem OCR-Text und PDFs mit eigenen Encoding-Vektoren sind typische Quellen für Map-Fehler
Wer Text aus einem PDF verlustfrei weiterverarbeiten will, sollte
CharacterMapError-Treffer herausfiltern oder markieren, bevor er sie als
durchsuchbaren Inhalt behandelt. Eine Häufung aufeinanderfolgender Map-Fehler zeigt meist
eine ganze Zeichenkette an, die per OCR statt über die Textebene neu extrahiert werden
sollte
True ist und die aktuelle Seite geparst wurde; andernfalls liefert sie 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;