property CharacterMapError[Index: Integer]: Boolean; // read only
| Index | 현재 페이지의 0 기반 문자 인덱스로, 0부터 CharacterCount - 1까지의 범위입니다 |
CharacterMapError는 PDFium이 지정한 인덱스의 문자를 Unicode 코드 포인트로
매핑하다 오류를 만났을 때 True를 반환합니다. 이 값이
True면 Character[Index]가 반환한 값은
신뢰할 수 없으며, 흔히 대체 문자(#$FFFD)로 떨어지거나
기반 글리프 식별자가 그대로 통과합니다
이 플래그는 프린터 드라이버와 변환 도구가 만든 PDF에서 가장 자주 켜집니다. 이런 PDF는 대응하는 ToUnicode CMap 없이 폰트 서브셋을 임베드하거나, 전체 글리프 셋을 커버하지 않는 CMap을 쓰기 때문입니다. OCR 텍스트를 얹은 스캔 PDF와 커스텀 인코딩 벡터를 쓰는 PDF도 매핑 오류의 전형적인 원인입니다
PDF에서 텍스트를 그대로 왕복시켜야 하는 호출자라면 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;