property CharacterMapError[Index: Integer]: Boolean; // read only
| Index | 目前頁面上以 0 為基底的字元索引,範圍 0 到 CharacterCount - 1 |
CharacterMapError 在 PDFium 將指定索引的字元對應到 Unicode 碼位時發生錯誤的話,就會傳回 True。當此值為 True 時,Character[Index] 傳回的值並不可靠,且通常會退回替換字元(#$FFFD)或直接透傳底層的字形識別碼
這個旗標最常出現在由印表機驅動程式與轉換工具產生的 PDF 上,這類檔案內嵌的字型子集缺少對應的 ToUnicode CMap,或是 CMap 未涵蓋完整的字形集。內嵌 OCR 文字的掃描式 PDF 與使用自訂編碼向量的 PDF,是對應錯誤的典型來源
需要從 PDF 往返(round-trip)文字的呼叫端,應先過濾或標註 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;