العرض السريع للويب: كيف يُفتَح ملف PDF قبل اكتمال تنزيله
Spec: ISO 32000-2, Annex FISO 32000-2 Annex F
لمحة سريعة
قسم بعنوان «لمحة سريعة»يُعاد تنظيم ملف PDF المُخطَّط خطياً بحيث تستقر الصفحة الأولى وفهرس تنقّل صغير في مقدمة الملف تماماً. وبذلك يستطيع العارض رسم الصفحة الأولى بينما لا تزال بقية المستند في طريقها إليه، والقفز مباشرةً إلى الصفحة 147 دون قراءة الصفحات من 2 إلى 146 أولاً.
هذه هي الميزة التي يعرفها معظم القرّاء باسمها الودود: العرض السريع للويب.
لماذا يهم هذا
قسم بعنوان «لماذا يهم هذا»تخيّل تقريراً من 200 صفحة على هاتف بإشارة شريط واحد. بدون التخطيط الخطي، كثيراً ما يحتاج العارض إلى نهاية الملف ذاتها قبل أن يتمكن من رسم أي شيء، لأن الفهرس الرئيسي الذي يحدد موضع كل كائن يستقر تقليدياً في النهاية. فتراقب مؤشر الدوران بينما تُنزَّل مئتا صفحة، لمجرد قراءة الصفحة الأولى.
مع التخطيط الخطي، يُرتَّب الملف بحيث تكون الإجابة عن سؤال “ماذا يوجد في الصفحة الأولى” أول ما يصل عبر الشبكة. يرسم القارئ الصفحة الأولى في ثانية، ولا يجلب البقية إلا أثناء التمرير أو القفز. على اتصال سريع قد لا تلاحظ ذلك أبداً. أما على اتصال بطيء أو محدود التكلفة، فهو الفرق بين مستند قابل للاستخدام وعلامة تبويب مهجورة.
الخلاصة المختصرة
قسم بعنوان «الخلاصة المختصرة»- يكون الملف المُخطَّط خطياً محمَّلاً في المقدمة: تُوضَع الصفحة الأولى وجدول تلميح أولاً، قبل بقية الجسم.
- جدول التلميح خريطة من النطاقات. يخبر العارض بنطاقات البايتات التي تعود إلى كل صفحة وإلى الكائنات المشتركة، كي يستطيع العارض أن يطلب من الخادم تلك الشرائح فقط — ثم يحلّ قسم المراجع التقاطعية كل رقم كائن إلى إزاحته الدقيقة.
- يعتمد ذلك على طلبات نطاق البايتات — جلب العارض لشرائح من الملف عند الطلب، لا الملف بأكمله.
- البايتات محتوى مطابق لملف PDF عادي. يغيّر التخطيط الخطي الترتيب والفهرس، لا الصفحات نفسها.
- إنها خطوة صريحة واحدة قابلة للتبديل في NextPDF — تُنتَج عبر إعادة بناء فعلية من ثلاثة تمريرات، لا عَلَماً يأمل خيراً.
كيف يتعامل NextPDF مع هذا
قسم بعنوان «كيف يتعامل NextPDF مع هذا»لا يمكنك تحميل صفحة في المقدمة قبل أن تعرف حجم كل شيء بدقة، لأن جدول التلميح يسجّل إزاحات البايتات، والإزاحة لا تكون صحيحة إلا بعد أن يصبح طول كل كائن نهائياً. تلك الدائرية — الإزاحات تعتمد على الأحجام، والأحجام تعتمد على التخطيط — هي سبب تشغيل أداة التخطيط الخطي عبر تمريرات بدلاً من مرور واحد.
يحلّ NextPDF ذلك بإعادة بناء حتمية من ثلاثة تمريرات. يقيس التمرير الأول، ويقرر الثاني موضع الوضع، ويكتب الثالث البايتات الحقيقية مع الإزاحات المعروفة الآن مدمجةً فيها.
- MEASURESerialise every object once to learn its exact byte length. Offsets are circular — they depend on sizes — so sizes are pinned first.
- PLACEDecide the order: first page and its dependencies up front, then the rest. Reserve space for the linearization parameter dictionary and the hint table.
- FILLWrite the final bytes. Each reserved field is filled with values computed after MEASURE and PLACE — the first-page length, the hint-table location, the main cross-reference offset — derived from the measured sizes and the chosen placement.
يحمل المُخرَج قاموس معاملات التخطيط الخطي بوصفه كائنه الأول، وجدول تلميح واحداً أو أكثر يفهرس الصفحات، تماماً كما يقرّ المعيار (Spec: ISO 32000-2, Annex FISO 32000-2 Annex F). تعمل جداول التلميح تلك جنباً إلى جنب مع قسم مراجع تقاطعية تقليدي — فهي تسجّل نطاقات البايتات والمواضع التي يحتاج العارض إلى جلبها، بينما قسم المراجع التقاطعية هو الفهرس الذي يربط كل رقم كائن بإزاحة بايته الدقيقة. تصدر أداة التخطيط الخطي في NextPDF صورة الجدول التقليدية وتطرد أي دفق مراجع تقاطعية على طول الطريق، فبمجرد وصول شريحة يحلّ القارئ كائناً بإزاحته مباشرةً من ذلك الجدول (Spec: ISO 32000-2, §7.5.4ISO 32000-2 §7.5.4).
نموذج ذهني مفيد: ملف PDF العادي كتاب جدول محتوياته ملصق بالغلاف الخلفي. أما ملف PDF المُخطَّط خطياً فينقل صفحة المحتويات تلك إلى المقدمة ويضيف فهرس أرقام صفحات لكل صفحة، كي تتمكن من فتح أي صفحة مباشرةً. الفصول دون تغيير. لم يتحرك سوى التنقّل.
مثال عملي
قسم بعنوان «مثال عملي»التخطيط الخطي خطوة صريحة قابلة للتبديل. تطلبها؛ فيؤدي المحرك إعادة البناء ويصدر ملف عرض سريع للويب.
<?php
declare(strict_types=1);
use NextPDF\Core\Document;use NextPDF\Contracts\OutputDestination;
$document = Document::createStandalone();$document->setTitle('Annual Report');
for ($page = 1; $page <= 200; $page++) { $document->addPage(); $document->setFont('helvetica', '', 12); $document->cell(0, 12, "Page {$page}", newLine: true);}
// Linearization is requested explicitly — an operability choice, not a default.// enableLinearization() takes no arguments; it is the on-switch. The engine// runs the MEASURE -> PLACE -> FILL rebuild and emits a Fast-Web-View file// with the first page and hint table at the front.$document->enableLinearization();
$bytes = $document->output(dest: OutputDestination::String);محتوى الصفحة هو بالضبط ما ألّفته. الفرق في ترتيب الملف للبايتات التي تستقبلها، وفي جدول التلميح الذي يستقر الآن قرب القمة.
تتحقق من النتيجة كما يفعل غريب — بمدقِّق خارجي:
$ qpdf --check-linearization report.pdfreport.pdf: no linearization errorsلا يكتفي qpdf --check-linearization بالبحث عن عَلَم. بل يعيد اشتقاق الإزاحات التي يدّعيها الملف ويؤكد أنها صحيحة: أن كائنات الصفحة الأولى موجودة فعلاً حيث يقول قاموس التخطيط الخطي، وأن جدول التلميح يشير إلى البايتات الصحيحة، وأن البنية تطابق Annex F. الملف الذي يكذب بشأن تخطيطه يفشل في هذا الفحص حتى لو بدا مُخطَّطاً خطياً للوهلة الأولى.
مفهوم خاطئ شائع
قسم بعنوان «مفهوم خاطئ شائع»الافتراض المتكرر هو أن التخطيط الخطي يضغط الملف أو يجعل التنزيل أسرع إجمالاً. وهو لا يفعل أياً منهما. كثيراً ما يكون الملف المُخطَّط خطياً أكبر ببضعة بايتات، لأنه يحمل جداول التلميح الإضافية. ويبقى زمن النقل الكلي للمستند كله دون تغيير جوهري.
ما يتغير هو متى تظهر أول بكسل مفيد. يحسّن التخطيط الخطي زمن الوصول إلى الصفحة الأولى، لا إجمالي البايتات. إنه ميزة زمن استجابة، لا ميزة ضغط. إن بث الصفحة الأولى مبكراً وتنزيل الملف بسرعة هدفان مختلفان، والتخطيط الخطي يخدم الأول.
مفهوم خاطئ ثانٍ هو أن أي خادم ويب سيبثّ ملفاً مُخطَّطاً خطياً. يحتاج العارض إلى جلب نطاقات بايتات، ما يعني أن الخادم يجب أن يحترم طلبات نطاق HTTP. معظمها يفعل، لكن الخادم الذي يعيد دائماً الملف بأكمله يحوّل العرض السريع للويب مجدداً إلى انتظار بطيء للملف كاملاً — فالملف جاهز للبثّ، لكن وسيلة النقل ليست كذلك.
الحدود والقيود
قسم بعنوان «الحدود والقيود»يملك NextPDF دعماً أساسياً كاملاً لإنتاج ملفات مُخطَّطة خطياً: أداة تخطيط خطي إنتاجية من ثلاثة تمريرات تصدر قاموس المعاملات وجداول التلميح وتجتاز فحص Annex F خارجياً.
| Edition | Availability |
|---|---|
| Core | دعم كامل. يُنتِج NextPDF مُخرَجاً مُخطَّطاً خطياً (عرضاً سريعاً للويب) عبر إعادة بناء إنتاجية من ثلاثة تمريرات MEASURE → PLACE → FILL، مطابقاً لـISO 32000-2 Annex F. |
| Pro | Not in this edition |
| Enterprise | Not in this edition |
يستحق حدّان أن يُسمّيا. أولاً، التخطيط الخطي خاصية لـمراجعة واحدة. ففي اللحظة التي تُلحِق فيها تحديثاً تزايدياً — توقيعاً، أو تعبئة نموذج، أو تحريراً — تذهب البايتات المُلحَقة إلى النهاية، ولا يعود الملف مُخطَّطاً خطياً بدقة حتى يُعاد بناؤه. هذه مفاضلة طبيعية، لا عيب؛ راجع التحديثات التزايدية لمعرفة سبب كون الإلحاق هو السلوك الصحيح للمستندات الموقَّعة.
ثانياً، يتحكم المحرك في الملف. لكنه لا يتحكم في الشبكة. لا يفي العرض السريع للويب بوعده إلا حين يحترم الاتصال الذي يقدّم الملف طلبات نطاق البايتات؛ فقد تكون البايتات مُخطَّطة خطياً تخطيطاً مثالياً، ومع ذلك تصل ككتلة بطيئة واحدة إذا أصرّ الخادم على إرسال الملف بأكمله.
مستندات ذات صلة
قسم بعنوان «مستندات ذات صلة»- تشريح ملف PDF — الترويسة والجسم وقسم المراجع التقاطعية والخاتمة التي يعيد التخطيط الخطي ترتيبها. اقرأ هذه أولاً لترى ما الذي يُعاد ترتيبه.
- الذاكرة والبثّ — البثّ من جهة الكتابة، محور مختلف: كيف يُبقي NextPDF استهلاك الذاكرة مستوياً أثناء إنتاج البايتات، مقابل كيف يبثّها القارئ عند الاستقبال.
- التحديثات التزايدية وسبب أهميتها — لماذا يُلحَق التحرير اللاحق بالنهاية، وما يعنيه ذلك لتخطيط ملف مُخطَّط خطياً المُحمَّل في المقدمة.
- الأدفاق والمرشِّحات — ما يستقر داخل كائنات الجسم التي يشير إليها جدول التلميح، وكيف تُضغَط.
مسرد المصطلحات
قسم بعنوان «مسرد المصطلحات»- التخطيط الخطي — إعادة البناء التي تحمّل الصفحة الأولى وفهرس تنقّل في المقدمة كي يستطيع العارض العرض والتنقّل قبل وصول الملف بأكمله. اسم المعيار للنتيجة.
- العرض السريع للويب — الاسم المتوجَّه للمستهلك لملف PDF مُخطَّط خطياً؛ يصف المصطلحان الملف نفسه.
- جدول التلميح — البنية داخل ملف مُخطَّط خطياً التي تسجّل نطاقات ومواضع البايتات لكل صفحة وللكائنات المشتركة، كي يعرف العارض أي شرائح يطلب؛ قسم المراجع التقاطعية هو ما يربط بعد ذلك رقم كائن بإزاحة بايته الدقيقة.
- قاموس معاملات التخطيط الخطي — الكائن الأول في ملف مُخطَّط خطياً؛ يعلن الإزاحات الأساسية (طول الصفحة الأولى، موضع جدول التلميح، موضع المراجع التقاطعية الرئيسي) التي تجعل الجلب عند الطلب ممكناً.
- طلب نطاق البايتات — طلب HTTP لشريحة من ملف بدلاً من الملف بأكمله؛ آلية النقل التي يعتمد عليها العرض السريع للويب.
- زمن الوصول إلى الصفحة الأولى — المدة حتى يرى القارئ الصفحة الأولى. زمن الاستجابة الذي يحسّنه التخطيط الخطي، متمايزاً عن زمن التنزيل الكلي.