CFF and OpenType Font Subsetting Functions

PDF Filter Support

 

Top  EnableFontSubsetting  목차

이 유닛 수준 함수들은 HotPDF의 임베드 글꼴 파이프라인이 사용하는 CFF, OpenType-CFF, sfnt 글꼴 검사용 공개 인터페이스입니다. 또한 HotPDF는 더 낮은 수준의 글꼴 검사가 필요한 호출자를 위해 재사용 가능한 Type 1 PFB 및 CFF 파서 유닛도 제공합니다

 

Delphi syntax

function HPDFSubsetCFF(const CFFBytes: TBytes; const KeepGlyph: array of Boolean): TBytes;

function HPDFIsCFF2Font(const FontBytes: TBytes): Boolean;

function HPDFInstantiateCFF2Font(const FontBytes: TBytes; const AxisValues: THPDFVariableFontAxisValueArray): TBytes;

function HPDFSubsetCFF2Font(const FontBytes: TBytes; const KeepGlyph: array of Boolean): TBytes;

function HPDFIsTrueTypeVariableFont(const FontBytes: TBytes): Boolean;

function HPDFInstantiateTrueTypeVariableFont(const FontBytes: TBytes; const AxisValues: THPDFVariableFontAxisValueArray): TBytes;

function HPDFSfntIsOTF(const Data: TBytes): Boolean;

function HPDFOTFFindCFFTable(const Data: TBytes; out TableOff: Cardinal; out TableLen: Cardinal): Boolean;

function HPDFSubsetOTFContainer(const OTFBytes: TBytes; const KeepGlyph: array of Boolean): TBytes;

function HPDFExtractTTFPostScriptName(const Data: TBytes): AnsiString;

 

Description

HPDFSubsetCFF는 글리프 ID를 그대로 유지하면서, 사용하지 않는 CharString과 서브루틴을 최소 스텁으로 교체하여 CFF 글꼴 페이로드를 제자리에서 다시 씁니다. 글꼴 컨테이너에서 CFF 테이블을 이미 추출한 호출자를 위한 헬퍼입니다

 

HPDFIsCFF2Font는 CFF2 테이블이 있는 sfnt를 감지합니다. HPDFInstantiateCFF2Font는 선택한 fvar 좌표를 avar 1.0 또는 2.0으로 해석하고, 재귀 서브루틴 전반에서 VariationStore 기반 blend 연산을 평가하며, HVAR, VVAR, MVAR 메트릭을 반영하고, 가변 테이블을 제거한 뒤 체크섬이 올바른 정적 sfnt를 반환합니다

 

HPDFSubsetCFF2Font는 같은 기본 좌표 인스턴싱을 수행하면서 사용하지 않는 글리프 프로그램을 빈 CharString으로 교체합니다. 글리프 ID, multi-FD 사전, private 힌트 데이터, 글꼴 행렬은 그대로 유지됩니다

 

HPDFIsTrueTypeVariableFont는 fvar, glyf, loca를 포함한 sfnt를 감지합니다. HPDFInstantiateTrueTypeVariableFont는 선택한 축을 avar로 매핑하고, gvar 튜플과 IUP 보간을 평가하며, 단순 및 합성 윤곽선과 phantom point 메트릭을 갱신하고, 해당되는 경우 HVAR, VVAR, MVAR을 적용한 뒤, 가변 테이블을 제거하고 체크섬이 올바른 정적 sfnt를 반환합니다

 

HPDFSfntIsOTF는 버전이 OTTO인 sfnt 컨테이너를 감지합니다. HPDFOTFFindCFFTable은 임베드된 'CFF ' 테이블의 위치를 찾습니다. HPDFSubsetOTFContainer는 임베드된 CFF 또는 CFF2 데이터를 서브셋화하고 sfnt 체크섬이 유효한 OTF 컨테이너를 반환합니다. HPDFExtractTTFPostScriptName은 sfnt name 테이블에서 name ID 6을 읽어, 있으면 PostScript 글꼴 이름을 반환합니다

 

서브셋터는 name-keyed CFF(Private DICT 하나, Local Subr INDEX 하나)와 CID-keyed CFF(Top DICT ROS 연산자, 여러 하위 글꼴 Private DICT로 이루어진 FDArray, 글리프-FD 맵인 FDSelect, FD별 Local Subr INDEX)를 모두 인식합니다. CID 지원은 CJK / Indic / Arabic OpenType-CFF 글꼴을 포괄하며, closure 스캔이 유지되는 각 CharString의 FD 컨텍스트를 추적하므로 FD별 Local Subr INDEX가 각각 독립적으로 서브셋화됩니다

 

더 낮은 수준의 CFF 정수 디코더, FDArray / FDSelect 파서, 서브루틴 스캐너는 이 공개 헬퍼 인터페이스 뒤에 있는 구현 세부 사항입니다

 

Type 1 and CFF parser units

HPDFType1Core, HPDFType1Glyphs, HPDFType1CFFHandler, HPDFType1PFBHandler는 재사용 가능한 바이트 배열 리더, Type 1 글리프 윤곽선 명령 추출, CFF Header / INDEX / dictionary / charset / encoding 파싱, 그리고 Type 1 PFB 메타데이터와 글리프 조회 헬퍼를 제공합니다. HPDFType1CFFHandler는 잘못된 인덱스, 순환, 과도한 깊이를 거부하면서, FontSet 전체에 걸친 SyntheticBase 상속을 Top 및 Private DICT 값, CharStrings, charset, Encoding, Local Subrs에 대해 해석합니다. HPDFType1CB는 C++Builder에서 쓰기 편한 파서 진입점을 제공합니다. 이 유닛들은 Delphi 및 C++Builder 패키지 프로젝트에 포함되어 있으므로, 애플리케이션에서 바이너리 파서를 직접 구현하지 않고도 Type 1 PFB와 CFF 데이터를 검사할 수 있습니다

 

See also: EnableFontSubsetting, FontEmbedding, PDF Filter Support

Type 2 스택 연산과 subroutine 안전성

네이티브 glyph 렌더러는 표준 Type 2 Boolean, 산술, 조건, transient-array, 스택 연산을 구현합니다. put, get, ifelse, random, dup, exch, index, roll이 포함됩니다

transient 값은 glyph마다 초기화되고 random 값은 재현 가능합니다. operand, transient-array, 재귀, 실행 한도는 malformed 프로그램을 부분 윤곽선 없이 거부합니다

subset 스캐너는 로컬 및 전역 subroutine 호출이 쓰는 산술·transient-array 표현식을 해석합니다. Type 2 16.16 고정소수점 operand도 포함됩니다

random 값, 알 수 없는 transient 상태, 프로시저 간 스택 효과 때문에 호출 대상이 불확실하면 subsetting은 잠재적으로 도달 가능한 윤곽선 의존을 버리는 대신 후보 subroutine을 전부 유지합니다

예약되고 폐기된 Multiple Master 연산은 여전히 지원되지 않으며 명시적으로 실패합니다