دوال تجزئة خطوط CFF و OpenType

دعم مرشحات PDF

 

الأعلى  EnableFontSubsetting  المحتويات

تكشف دوال مستوى الوحدة هذه واجهة فحص الخطوط العامة لـ CFF و OpenType-CFF و sfnt التي يستخدمها مسار الخطوط المضمّن في HotPDF. ويوفّر HotPDF أيضًا وحدتي محلل قابلتي لإعادة الاستخدام لـ Type 1 PFB و CFF للمستدعين الذين يحتاجون فحص خطوط أدنى مستوى

 

صيغة Delphi

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;

 

الوصف

يعيد HPDFSubsetCFF كتابة حمولة خط CFF في مكانها، محافظًا على معرفات المحارف (glyph IDs) ومستبدلًا CharStrings والدالات الفرعية غير المستخدمة بأدنى بقايا. وهي المساعدة للمستدعين الذين استخرجوا جدول CFF فعلًا من حاوية خطوط

 

يكتشف HPDFIsCFF2Font ملف sfnt يحوي جدول CFF2. ويحل HPDFInstantiateCFF2Font إحداثيات fvar المختارة عبر avar 1.0 أو 2.0، ويقيّم عمليات blend المدعومة بـ VariationStore عبر الدالات الفرعية العودية، ويثبّت مقاييس HVAR و VVAR و MVAR، ويزيل جداول المتغيرات، ويعيد sfnt ساكنًا بمجاميع تحقق صحيحة

 

ينفذ HPDFSubsetCFF2Font إنشاء النسخ بالإحداثيات الافتراضية نفسه مع استبدال برامج المحارف غير المستخدمة بـ CharStrings فارغة. ويحافظ على معرفات المحارف وقواميس multi-FD وبيانات hint الخاصة ومصفوفات الخط

 

يكتشف HPDFIsTrueTypeVariableFont ملف sfnt يحوي fvar و glyf و loca. ويسقط HPDFInstantiateTrueTypeVariableFont المحاور المختارة على avar، ويقيّم أزواج gvar واستيفاء IUP، ويحدّث المخططات التفصيلية البسيطة والمركبة مع مقاييس النقاط الوهمية (phantom points)، ويطبق HVAR و VVAR و MVAR حيث ينطبق، ويزيل جداول التغيّر، ويعيد sfnt ساكنًا بمجاميع تحقق صحيحة

 

يكتشف HPDFSfntIsOTF حاوية sfnt التي إصدارها OTTO. ويحدد HPDFOTFFindCFFTable موقع الجدول المضمّن 'CFF '. ويجزّأ HPDFSubsetOTFContainer بيانات CFF أو CFF2 المضمّنة ويعيد حاوية OTF بمجاميع تحقق sfnt صالحة. ويقرأ HPDFExtractTTFPostScriptName الاسم ذا المعرف 6 من جدول name في sfnt ويعيد اسم خط PostScript إن وُجد

 

يتعرف مُجزّئ الخط على CFF ذي المفاتيح بالأسماء (Private DICT مفرد و INDEX واحد للدالات الفرعية المحلية) وعلى CFF ذي المفاتيح CID (معامل ROS في Top DICT، و FDArray من قواميس Private DICT لعدة خطوط فرعية، وخريطة FDSelect من المحرف إلى FD، و INDEXes للدالات الفرعية المحلية لكل FD). ويغطي دعم CID خطوط OpenType-CFF للصينية/اليابانية/الكورية والهندية والعربية؛ ويتتبع مسح الإغلاق سياق FD لكل CharString محفوظ فتُجزَّأ INDEXes الدالات الفرعية المحلية لكل FD باستقلالية

 

أما فكوك أعداد CFF الصحيحة الأدنى مستوى ومحللات FDArray / FDSelect وماسحات الدالات الفرعية فهي تفاصيل تنفيذ خلف هذه الواجهة المساعدة العامة

 

وحدات محللات Type 1 و CFF

توفّر الوحدات HPDFType1Core وHPDFType1Glyphs وHPDFType1CFFHandler وHPDFType1PFBHandler قارئات قابلة لإعادة الاستخدام لمصفوفات البايت، واستخراجًا لأوامر مخططات glyph في Type 1، وتحليلًا لـ CFF Header / INDEX / القواميس / charset / الترميز، إضافة إلى دوال مساعدة للبيانات الوصفية لـ Type 1 PFB والبحث عن glyph. يحلّ HPDFType1CFFHandler وراثة SyntheticBase عبر FontSet لقيم Top DICT وPrivate DICT وCharStrings وcharset وEncoding وLocal Subrs، ويرفض الفهارس غير الصالحة والدورات والعمق المفرط. ويوفّر HPDFType1CB نقطة دخول للمحلِّل مناسبة لـ C++Builder. وقد أُدرجت هذه الوحدات في مشروعي حزمة Delphi وC++Builder، فيمكن للتطبيقات فحص بيانات Type 1 PFB وCFF دون إعادة تنفيذ المحلِّلات الثنائية

 

انظر أيضًا: EnableFontSubsetting, FontEmbedding, دعم مرشحات PDF

عمليات مكدس Type 2 وسلامة الدالات الفرعية

ينفّذ عارض المحارف الأصلي عمليات Type 2 القياسية للقيم المنطقية والحسابية والشرطية والمصفوفة العابرة والمكدس، بما في ذلك put وget وifelse وrandom وdup وexch وindex وroll

تُعاد قيم المصفوفة العابرة (transient) لكل محرف، وتكون قيم random قابلة لإعادة الإنتاج، وترفض حدود المعاملات والمصفوفة العابرة والعودية والتنفيذ البرامجَ المشوّهة دون إعادة مخطط تفصيلي جزئي

يحلّ ماسح التجزئة التعبيرات الحسابية وتعبيرات المصفوفة العابرة التي تستخدمها استدعاءات الدالات الفرعية المحلية والعامة، بما في ذلك معاملات النقطة الثابتة 16.16 في Type 2

عندما تجعل قيم random أو حالة عابرة مجهولة أو تأثيرات المكدس بين الإجراءات هدفَ الاستدعاء غير مؤكد، يحتفظ التجزئة بكل دالة فرعية مرشحة بدل إسقاط اعتمادٍ لمخطط تفصيلي قد يكون reachable

تبقى عمليات Multiple Master المحجوزة والمهجورة غير مدعومة وتفشل بشكل صريح