PDFium Delphi Component Docs

CharacterMapError プロパティ

コンポーネント: TPdf  ·  ユニット: PDFium
指定した index の character を有効な Unicode code point に写像できなかったとき True を返します。この flag は PDFium の text extractor が character ごとに報告し、元の font に使える ToUnicode CMap や encoding vector がないために誤っている可能性が高い code point を caller が特定できるようにします

Syntax

property CharacterMapError[Index: Integer]: Boolean; // read only

Index現在のページでの 0 基準の文字インデックス。範囲は 0 から CharacterCount - 1

Description

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 全体を示します

Remarks

Example

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;

See Also

Character, Charcode, CharacterGenerated, CharacterCount, Text