السجل THPDFFontDecoder
يحمل جداول فك الترميز المحلولة ومقاييس العرض لخط PDF محمَّل واحد، ويبنيها سلسلة الاحتياط لفك ترميز الخطوط
التصريح
THPDFFontDecoder= record
FontKey: AnsiString; // resource key (e.g. /F1) for diagnostics
Subtype: AnsiString; // Type0, Type1, TrueType, CIDFontType2
Strategies: THPDFFontStrategies; // which fallbacks are populated
ToUnicodeMap: THPDFCMapParseResult;
EncodingMap: THPDFCMapParseResult; // /Encoding stream or named CMap
PredefinedEncoding: AnsiString; // 'WinAnsiEncoding' etc
CIDToGIDIdentity: boolean;
CIDToGIDs: array of Word; // binary CIDToGIDMap stream
CIDToUnicode: THPDFCIDToUnicodeTable; // cid2code.txt fallback
GlyphNameUnicode: array[0.. 255] of Cardinal;
GIDToUnicode: THPDFUnicodeByGID;
// v2.505.0 simple-font /Widths (PDF 1.7 9.6.3 Table 111). Index =
// (code - FirstChar); values are 1/1000-em glyph advances. Empty when
// the font has no /Widths array (the interpreter falls back to 0.5*fs)
Widths: array of Double;
FirstChar: Integer;
LastChar: Integer;
CIDWidths: THPDFCIDWidthRanges;
CIDDefaultWidth: Double;
// Vertical (WMode 1) counterparts from the descendant CIDFont /W2 and
// /DW2 (ISO 32000-1 9.7.4.3). Each /W2 metric is a [w1y v1x v1y]
// triple: w1y is the displacement along the writing axis, v1x/v1y the
// position vector from the glyph's horizontal origin to its vertical
// origin. A range entry (cFirst cLast w1y v1x v1y) stores one triple;
// a list entry (c [w1y v1x v1y ...]) stores one triple per CID from
// FirstCID to LastCID. VerticalWriting gates the resolver's vertical
// branch
CIDVertWidths: THPDFCIDWidthRanges;
CIDVertDefaultAdvance: Double; // /DW2 w1y (second entry); default -1000
CIDVertDefaultOriginY: Double; // /DW2 v1y (first entry); default 880
VerticalWriting: boolean;
Ascent: Double;
Descent: Double;
HasVerticalMetrics: boolean;
CodeUnitBytes: Integer; // bytes per char code
OK: boolean;
end;
الوحدة
HPDFTextExtraction
الحقول
| الحقل | الغرض |
|---|---|
FontKey | مفتاح مورد مثل /F1 يسمّي الخط، ويُحتفظ به لأغراض التشخيص |
Subtype | النوع الفرعي لقاموس الخط: Type0 أو Type1 أو TrueType أو CIDFontType2 ونحوها |
Strategies | مجموعة استراتيجيات الاحتياط التي نجحت تعبئتها |
ToUnicodeMap | خريطة CMap المُحلَّلة لمدخل /ToUnicode مع مدخلات bfchar وbfrange، ولها الأولوية القصوى |
EncodingMap | تدفق /Encoding المُحلَّل أو خريطة CMap مسمّاة |
PredefinedEncoding | اسم ترميز معرَّف مسبقًا مثل WinAnsiEncoding |
CIDToGIDIdentity | يصبح True عندما تكون CIDToGIDMap من نوع Identity ولا يلزم جدول صريح |
CIDToGIDs | تدفق CIDToGIDMap الثنائي موسَّعًا إلى قيمة Word واحدة لكل CID |
CIDToUnicode | جدول التحويل من CID إلى Unicode من مسار cid2code.txt الاحتياطي |
GlyphNameUnicode | جدول من 256 مدخلًا يحوّل أسماء المحارف إلى Unicode تستخدمه استعادة /Differences |
GIDToUnicode | جدول cmap المضمَّن معكوسًا من معرّف المحرف إلى Unicode |
Widths | قيم التقدم في /Widths للخطوط البسيطة بوحدة 1/1000 em، مفهرسة بالرمز مطروحًا منه FirstChar |
FirstChar | أول رمز محرف مدعوم في مصفوفة Widths |
LastChar | آخر رمز محرف مدعوم في مصفوفة Widths |
CIDWidths | نطاقات عرض CID من مصفوفة /W الخاصة بـ CIDFont |
CIDDefaultWidth | قيمة تقدم CID الافتراضية من /DW |
CIDVertWidths | مقاييس /W2 الرأسية مخزَّنةً بثلاثيات [w1y v1x v1y] لكل CID أو نطاق |
CIDVertDefaultAdvance | الإزاحة الرأسية الافتراضية من w1y في /DW2، وافتراضها -1000 |
CIDVertDefaultOriginY | الأصل الرأسي الافتراضي من v1y في /DW2، وافتراضه 880 |
VerticalWriting | يصبح True عندما تحكم مقاييس WMode 1 في الفرع الرأسي للحلّال |
Ascent | علو الخط المقروء من مقاييس واصف الخط |
Descent | انخفاض الخط المقروء من مقاييس واصف الخط |
HasVerticalMetrics | يصبح True عندما تُعثر على مقاييس رأسية للخط |
CodeUnitBytes | عدد البايتات لكل رمز محرف، ويُقدَّم لمفسّر المحتوى لهذا الخط |
OK | يصبح True عندما تكون إحدى استراتيجيات فك الترميز قابلة للاستخدام على الأقل |
ملاحظات الاستخدام
- يبنيه
HPDFBuildFontDecoder؛ ويُبقي السجل البسيط خطوط صفحة كاملة منخفضة الكلفة دون أي تخصيص ذاكرة كومة خاص به - يجتاز
HPDFDecodeCharCodeالاستراتيجيات بترتيب الأولوية ويعيد 0 عند الإخفاق؛ وتتدهور التدفقات المفقودة بصمت إلى الاستراتيجية التالية - استدعِ
HPDFCloneFontDecoderعندما يجب أن يعيش مُفكك الترميز أطول من المخزن المؤقت الذي أنتجه، لأن المصفوفات الديناميكية تُشارك بالمرجع