إنشاء تخطيط الصفحة

يمكن أن يكون إنشاء تخطيط الصفحة إجراء مكلفا، سواء من حيث السرعة أو الذاكرة. هذا يرجع إلى عدة أسباب:

  • قد يحتوي المستند على كمية كبيرة من المحتوى، والتي قد تحتاج إلى عرضها على آلاف الصفحات. يجب وصف هندسة كل كائن في كل صفحة، مما يستهلك موارد الذاكرة.
  • قد تحتوي الوثيقة على العديد من القواعد، مما يضع قيودا على الهندسة. قد يتم إنفاق وقت حسابي كبير، مما يضمن تلبية كل قيد.
  • تقوم بعض ميزات المستند، على سبيل المثال، حقل NUMPAGES، بإنشاء تبعيات متكررة لقيم الخصائص المستقبلية، والتي لا تتوفر في وقت الحساب. هذا يؤدي إلى حسابات متكررة ويضيف في وقت الحساب.

نظرا للأسباب المذكورة أعلاه، ستنشئ Aspose.Words تخطيط صفحة فقط عندما يكون ذلك ضروريا. قد يكون السبب النموذجي لذلك هو طلب عرض صفحات المستند أو الحصول على قيمة حقل تعتمد على المعلومات المتاحة في تخطيط الصفحة. قد يكون السبب الأقل وضوحا هو تصدير مستند إلى HTML. على الرغم من أن HTML ليس تنسيق صفحة ثابتة ولا يصف هندسة كائنات المحتوى، إلا أنه لا يزال يدعم الصور. قد تكون هذه الصور في شكل أشكال تم إنشاؤها في Microsoft Word مع نص بداخلها. على سبيل المثال، يمكن تصدير مخطط مع تسميات المحور إلى HTML كصورة، ولكن قبل أن يتم ذلك Aspose.Words يحتاج إلى عرض تلك الصورة وبالتالي يحتاج إلى معرفة مكان عرض التسمية. انظر مثال الرسم البياني أدناه:

converting-to-fixed-page-format-aspose-words-cpp-1

خصائص غير هندسية

بالإضافة إلى التعامل مع المعلومات الهندسية، فإن تخطيط الصفحة مسؤول أيضا عن حساب الألوان وأنماط الحدود. في Microsoft Word، يمكن تحديد لون النص تلقائيا، مما يعني أن اختيار اللون يجب أن يعتمد على لون التظليل للخلية أو الفقرة، أو بناء على لون الصفحة، حيث يظهر النص.

يحسب تخطيط الصفحة مكان ظهور النص والمحتوى الذي سيتم عرضه خلفه، مما يتيح حساب اللون. هناك حسابات محددة أخرى يقوم بها تخطيط الصفحة. على سبيل المثال، يعتمد الحد الأفقي في الجدول على ما إذا كان صف الجدول هو الأخير في عمود النص، وما إذا كان مقسما عبر الأعمدة. إذا تم عرض صف آخر في عمود، فسيتم استخدام الحد السفلي بدلا من الأفقي.

converting-to-fixed-page-format-aspose-words-cpp-2

في Aspose.Words، يمكن للمستخدم طلب إنشاء تخطيط صفحة جديد أو تحديث تخطيط موجود. كل من هذه يمكن أن يؤديها طريقة UpdatePageLayout، التي تقدمها فئة Document. إذا لم يكن تخطيط الصفحة موجودا، ولكن هناك حاجة إليه (على سبيل المثال، عندما يتم تصدير المستند إلى تنسيق صفحة ثابتة)، فسيقوم Aspose.Words باستدعاء هذه الطريقة تلقائيا. ومع ذلك، إذا كان تخطيط الصفحة موجودا بالفعل، فسيستخدم Aspose.Words المخطط الحالي، لتجنب استهلاك الموارد اللازمة لتحديثه. في هذه الحالة، يحتاج المستخدم إلى استدعاء طريقة UpdatePageLayout، للتأكد من أن تخطيط الصفحة محدث مع نموذج المستند.

هيكل ديناميكي

تتكون عملية إنشاء تخطيط الصفحة من الخطوات التالية:

  • Conversion - تعداد محتوى نموذج المستند وإعداد كائنات التخطيط المقابلة.
  • Build - ترتيب كائنات التخطيط لتمثيل محتوى المستند على الصفحات.
  • Reflow - تحديث ترتيب الكائنات لتلبية قيود الهندسة.
  • Projecting layout objects into fixed page presentation and finalizing color information.
  • Building and reflowing of shape content - خطوة مطلوبة إذا كان المستند يحتوي على أشكال ذات محتوى نصي متداخل.

ملاحظة، أن تخطيط الصفحة هو بنية ديناميكية، والتي يمكن إعادة بنائها جزئيا. هذا مطلوب بشكل خاص عندما يكون من المستحيل حساب قيم الحقل دون إعادة بناء بنية تخطيط المستند. يمكن للحقل الرجوع إلى موقع كائن على الصفحة، وفي نفس الوقت، يتم أيضا عرض قيمة الحقل نفسها على الصفحة، مما يؤثر على موقع الكائن المشار إليه. لا يمكن إنشاء تخطيط الصفحة دفعة واحدة، لأن قيم الحقول قد لا تكون متاحة بعد في وقت تحديد الموضع على الصفحة.

ضع في اعتبارك السيناريو النموذجي عندما يظهر الحقل NUMPAGES في تذييل الصفحة الأولى في المستند. قيمة هذا الحقل هي العدد الإجمالي للصفحات. من أجل وضع الحقل على الصفحة، يجب معرفة قيمته. إذا تم إنشاء الصفحة الأولى فقط حاليا، فإن العدد الإجمالي للصفحات غير معروف بعد. في هذه الحالة، يجب أن يستخدم تخطيط الصفحة القيمة الافتراضية ثم يعود لاحقا إلى هذا الحقل ويغير قيمته وفقا للحسابات الفعلية. ومع ذلك، قد يؤثر تغيير قيمة الحقل على محتوى مستند آخر على الصفحة ويؤدي في النهاية إلى إلحاق صفحة جديدة أو إزالة صفحة موجودة، مما يجعل القيمة المحسوبة قديمة. يمكن حل هذه المشكلة عن طريق تمكين تحديث تخطيط الصفحة الحالي.

عند إنشاء تخطيط، من الممكن أيضا إعداد خصائص LayoutOptions التي تؤثر على إخراج المستند على الصفحات.