property CharacterMapError[Index: Integer]: Boolean; // read only
| Index | 現在のページでの 0 基準の文字インデックス。範囲は 0 から CharacterCount - 1 |
CharacterMapError は、PDFium が指定 index の character を Unicode code point へ写像する際にエラーに遭遇すると True を返します。True のとき、Character[Index] が返す値は信頼できず、置換文字(#$FFFD)へフォールバックしたり、基底の glyph identifier をそのまま通したりすることがよくあります
この flag が立つのは多くの場合、対応する ToUnicode CMap なしでフォント subset を埋め込むプリンタードライバーや変換ツールが生成した PDF、またはグリフ集合全体をカバーしない CMap を持つ PDF です。OCR テキストを埋め込んだスキャン PDF や、独自の encoding vector を使う PDF も、マップエラーの典型的な発生源です
PDF からテキストを往復させたい呼び出し側は、検索可能なコンテンツとして扱う前に CharacterMapError のヒットをフィルタするか注釈を付けてください。連続するマップエラーの集まりは通常、テキストレイヤー経由ではなく OCR で再抽出すべき文字列 run 全体を示します
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;