تخطَّ إلى المحتوى
getnextpdf.com

Pro الإصدار

أدوات الخطوط

يفحص ⁨NextPDF Pro⁩ برامج الخطوط المُضمَّنة، ويحدّد الخطوط الجزئية بحسب اصطلاح تسميتها المعياري، ويُنتج خطّة إلغاء تجزئة مُنظَّمة بأثر حجم مُقدَّر.

تتوفّر هذه القدرة في ⁨NextPDF Pro⁩ (nextpdf/pro) وتُفعَّل عبر مِظروف ترخيص من فئة ⁨Pro⁩. والنشر بلا ذلك الاستحقاق لا يُحمِّل أصناف هذه القدرة. قارن الإصدارات واحصل على ترخيص.

لا يوجد علم ترخيص لكل ميزة يحجب هذه الوحدة. أصناف ⁨Font Tools⁩ متاحة كلما كان nextpdf/pro مُثبَّتًا.

Terminal window
composer require nextpdf/pro:^3

تُضمِّن الخطوط الجزئية في ملف ⁨PDF⁩ المحارف التي يستخدمها المستند فقط. وبحسب الاصطلاح، يحمل اسمها /BaseFont وسمًا من ستة أحرف كبيرة متبوعًا بـ +، مثلًا ABCDEF+Arial. يقوم ⁨NextPDF Pro⁩ بما يلي:

  • يكتشف الخطوط الجزئية. يمسح FontDesubsetter بيانات ⁨PDF⁩ الخام بحثًا عن مدخلات /BaseFont، ويتعرّف على نمط بادئة الخط الجزئي، ويُبلِّغ عن كل مدخل بوصفه كائن قيمة SubsetInfo بالاسم العائلي الأصلي، وعدد محارف الخط الجزئي، وعدد المحارف الكامل، والترميز.
  • يخطّط لإلغاء التجزئة. يجمع DesubsetPlan الخطوط الجزئية المُستهدَفة للاستبدال ببرامج خطوط كاملة ويُبلِّغ عن زيادة حجم بالبايت مُقدَّرة، لكي تقرّر ما إذا كان إلغاء التجزئة يستحقّ كلفة حجم الملف قبل التنفيذ.

‏⁨Font Tools⁩ طبقة تحليل وتخطيط. تصف ما هو موجود وما سيكلّفه إلغاء التجزئة؛ وهي بنفسها لا تُعيد كتابة برنامج الخط.

إعادة كتابة برنامج خط مُضمَّن هي الجزء الصعب والمحفوف بالمخاطر. إذ يجب أن تبقى مخطّطات المحارف، والتلميح، وجداول cmap متسقة، وخطأ واحد يُفسد العرض. لذا يفصل ⁨NextPDF Pro⁩ العملَ الرخيص والآمن — الجرد وإسقاط الكلفة — عن تلك الإعادة المكلفة. يقرأ الماسح البايتات فقط؛ فهو لا يُحلّل برنامج خط ولا يُنفّذه أبدًا، فيبقى حتميًّا وبلا آثار جانبية. وقد وُسِمت أعداد المحارف وفرق الحجم بوصفها إرشادات عن قصد، لكي يبقى تقدير السعة أمينًا بدلًا من الوثوق برقم لا تستطيع الوحدة قياسه. وهذا يتيح لك ترجيح ما إذا كان إلغاء التجزئة يستحقّ الكلفة قبل تدبير برامج خطوط كاملة.

خلفية التصميم: الخطوط: الجزء الصعب.

الصنفالمسؤولية
FontDesubsetterمسح بيانات ⁨PDF⁩ والإبلاغ عن مدخلات الخطوط الجزئية.
SubsetInfoوصف غير قابل للتغيير لخط جزئي مُكتشَف واحد.
DesubsetPlanالخطوط الجزئية المُستهدَفة إضافةً إلى زيادة الحجم المُقدَّرة.
use NextPDF\Pro\FontTools\FontDesubsetter;
$subsets = (new FontDesubsetter())->analyzeSubsets($pdfBytes);
foreach ($subsets as $info) {
echo $info->baseFont . ': ' . $info->subsetGlyphCount . " glyphs\n";
}
use NextPDF\Pro\FontTools\FontDesubsetter;
$desubsetter = new FontDesubsetter();
$subsets = $desubsetter->analyzeSubsets($pdfBytes);
$logger->info('fonttools.scan', ['subset_count' => count($subsets)]);
  • يُبلِّغ الماسح عن /BaseFont بلا بادئة الأحرف الستة بوصفه مدخلًا غير جزئي بدلًا من تخطّيه.
  • زيادة الحجم المُقدَّرة إرشاد يعتمد على متوسط البايتات لكل محرف، لا قيمة مقيسة.
  • يعمل الكشف على التمثيل البايتي لمدخلات /BaseFont؛ ودفقات الكائنات المُشفَّرة أو المضغوطة بشدة قد تحتاج إلى فكّ ترميز أولًا.

مسح الخطوط الجزئية خطّي بطول بايتات الـ ⁨PDF.⁩ التخطيط خطّي بعدد الخطوط الجزئية المُكتشَفة.

يقرأ ⁨Font Tools⁩ البيانات الوصفية البنيوية فقط. ولا يُنفّذ برامج الخطوط ولا يحلّ مراجع الخطوط الخارجية.

السلوكالمرجعالحالة
اصطلاح تسمية الخط الجزئيISO 32000-2 §9.9.2مُتوائم (مُعاد صياغته)
  • يمسح FontDesubsetter::analyzeSubsets() بيانات ⁨PDF⁩ الخام بحثًا عن مدخلات /BaseFont، ويتعرّف على بادئة الخط الجزئي ذات الأحرف الستة الكبيرة مع +، ويُعيد كلًّا منها بوصفه SubsetInfo غير قابل للتغيير بالاسم العائلي الأصلي، وعدد محارف الخط الجزئي، وعدد المحارف الكامل، والترميز.
  • /BaseFont بلا بادئة الخط الجزئي يُبلَّغ عنه بوصفه مدخلًا غير جزئي بدلًا من تخطّيه.
  • يجمع DesubsetPlan الخطوط الجزئية المُستهدَفة للاستبدال ويُبلِّغ عن زيادة حجم بالبايت مُقدَّرة اعتمادًا على متوسط البايتات لكل محرف — إرشاد، لا قيمة مقيسة.
  • هذه طبقة تحليل وتخطيط. تُبلِّغ عمّا هو موجود وما سيكلّفه إلغاء التجزئة؛ وهي لا تُعيد كتابة برنامج الخط، أو تُنفّذ برامج الخطوط، أو تحلّ مراجع الخطوط الخارجية.

لا يغيّر ⁨Enterprise⁩ سلوك ⁨Font Tools.⁩ يضيف ⁨Enterprise⁩ ميزات من طبقة أعلى موثَّقة بشكل منفصل؛ وهي ليست مطلوبة لكشف الخطوط الجزئية أو لتخطيط إلغاء التجزئة.

يعالج مسار الخطوط مفتوح المصدر في ⁨NextPDF Core⁩ تضمين الخطوط الأساسية. حساب الخطوط الجزئية وتخطيط إلغاء التجزئة إضافتان في ⁨Pro.⁩ انظر /modules/font/.

توثّق هذه الصفحة السلوك القابل للملاحظة خارجيًا وسطح الـ ⁨API⁩ العام المدعوم فقط. أما مسارات النطاقات الداخلية، والأصناف المساعدة، وجداول الآليات، وأسماء ملفات أدلة التشغيل، وبادئات التذاكر فخارج النطاق.