property CharacterMapError[Index: Integer]: Boolean; // read only
| Index | Indeks znaku liczony od zera na bieżącej stronie, w zakresie od 0 do CharacterCount - 1 |
CharacterMapError zwraca True, gdy PDFium napotkał błąd
podczas mapowania znaku pod wskazanym indeksem na punkt kodowy Unicode. Gdy flaga ma
wartość True, wartość zwracana przez Character[Index]
jest zawodna i często spada do znaku zastępczego (#$FFFD) lub do przejścia
identyfikatora bazowego glifu
Flaga jest najczęściej podnoszona w plikach PDF tworzonych przez sterowniki drukarek i narzędzia konwertujące, które osadzają podzbiory czcionek bez odpowiadającej im mapy ToUnicode CMap lub z CMapem, który nie pokrywa pełnego zestawu glifów. Skanowane pliki PDF z osadzonym tekstem OCR oraz pliki PDF używające niestandardowych wektorów kodowania to typowe źródła błędów mapowania
Wywołujący, którzy muszą przenosić tekst z pliku PDF w obie strony, powinni filtrować
lub adnotować trafienia CharacterMapError, zanim zaczną traktować je jako
zawartość przeszukiwalną. Klaster kolejnych błędów mapowania zwykle wskazuje cały przebieg
tekstowy, który należy wyodrębnić ponownie przez OCR, a nie przez warstwę tekstową
True, a bieżąca strona została sparsowana; w przeciwnym razie zwraca 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;