عرض الأشكال بشكل منفصل عن المستند

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

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

أنواع الأشكال في Aspose.Words

يتم تمثيل كل المحتوى الموجود في طبقة رسم المستند بواسطة عقدة Shape أو GroupShape في وحدة كائن مستند Aspose.Words (DOM). يمكن أن تكون هذه المحتويات عبارة عن مربعات نص، أو صور، أو أشكال تلقائية، أو كائنات OLE، وما إلى ذلك. ويتم أيضًا استيراد بعض الحقول كأشكال، على سبيل المثال، حقل INCLUDEPICTURE.

يتم تمثيل صورة بسيطة بواسطة عقدة Shape الخاصة بـ ShapeType.Image. لا تحتوي عقدة الشكل هذه على عقد فرعية ولكن يمكن الوصول إلى بيانات الصورة الموجودة داخل عقدة الشكل هذه بواسطة خاصية Shape.ImageData. من ناحية أخرى، يمكن أيضًا أن يتكون الشكل من العديد من العقد الفرعية. على سبيل المثال، يمكن أن يتكون شكل مربع النص، الذي يتم تمثيله بواسطة خاصية ShapeType.TextBox، من العديد من العقد، مثل Paragraph وTable. يمكن أن تتضمن معظم الأشكال العقد على مستوى الكتلة Paragraph وTable. هذه هي نفس العقد التي تظهر في الجسم الرئيسي. الأشكال هي دائمًا أجزاء من بعض الفقرات، إما مضمنة مباشرة في السطر أو مثبتة في فقرة، ولكنها “عائمة” في أي مكان في صفحة المستند.

rendering-shapes-separately-from-a-document_1

يمكن أن يحتوي المستند أيضًا على أشكال مجمعة معًا. يمكن تمكين Grouping في Microsoft Word عن طريق تحديد كائنات متعددة والنقر فوق “Group” في قائمة النقر بزر الماوس الأيمن.

rendering-shapes-separately-from-a-document_2

في Aspose.Words، يتم تمثيل مجموعات الأشكال هذه بواسطة عقدة GroupShape. يمكن أيضًا استدعاء هذه العناصر بنفس الطريقة لعرض المجموعة بأكملها على شكل صورة.

rendering-shapes-separately-from-a-document_3

يمكن أن يحتوي تنسيق DOCX على أنواع خاصة من الصور، مثل الرسوم البيانية أو المخططات. ويتم تمثيل هذه الأشكال أيضًا من خلال عقدة Shape في Aspose.Words، والتي توفر أيضًا طريقة مشابهة لعرضها كصور. حسب التصميم، لا يمكن أن يحتوي الشكل على شكل آخر كطفل، إلا إذا كان هذا الشكل عبارة عن صورة (ShapeType.Image). على سبيل المثال، لا يسمح لك Microsoft Word بإدراج مربع نص داخل مربع نص آخر.

توفر أنواع الأشكال الموضحة أعلاه طريقة خاصة لعرض الأشكال من خلال فئة ShapeRenderer. يتم استرداد مثيل فئة ShapeRenderer لـ Shape أو GroupShape من خلال أسلوب GetShapeRenderer أو عن طريق تمرير Shape إلى مُنشئ فئة ShapeRenderer. توفر هذه الفئة الوصول إلى الأعضاء، مما يسمح بتقديم شكل لما يلي:

  • الملف الموجود على القرص باستخدام طريقة التحميل الزائد Save
  • الدفق باستخدام طريقة التحميل الزائد Save
  • كائن رسومي .NET باستخدام طريقتي RenderToSize وRenderToScale

التقديم إلى ملف أو دفق

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

يمكن تصدير الشكل بأي تنسيق صورة محدد في تعداد SaveFormat. على سبيل المثال، يمكن عرض الصورة كصورة نقطية، مثل JPEG عن طريق تحديد تعداد SaveFormat.Jpeg، أو كصورة متجهة، مثل EMF عن طريق تحديد SaveFormat.Emf.

يوضح مثال التعليمات البرمجية أدناه عرض شكل لصورة EMF بشكل منفصل عن المستند وحفظه على القرص:

يوضح مثال التعليمات البرمجية أدناه عرض شكل إلى صورة JPEG بشكل منفصل عن المستند وحفظه في دفق:

تسمح لك فئة ImageSaveOptions بتحديد مجموعة متنوعة من الخيارات التي تتحكم في كيفية عرض الصورة. يمكن تطبيق الوظيفة الموضحة أعلاه بنفس الطريقة على عقدتي GroupShape وShape.

التقديم إلى كائن رسومي .NET

يتيح لك العرض مباشرة إلى كائن Graphics تحديد الإعدادات الخاصة بك وحالة كائن Graphics. يتضمن السيناريو الشائع عرض شكل مباشرةً في كائن Graphics تم استرداده من نموذج Windows أو صورة نقطية. عندما يتم عرض عقدة Shape، ستؤثر الإعدادات على مظهر الشكل. على سبيل المثال، يمكنك تدوير الشكل أو تغيير حجمه باستخدام أساليب RotateTransform أو ScaleTransform لكائن Graphics.

يوضح المثال أدناه كيفية تقديم شكل إلى كائن .NET Graphics بشكل منفصل عن المستند وتطبيق التدوير على الصورة المعروضة:

وبالمثل، بالنسبة إلى طريقة RenderToSize، فإن طريقة RenderToSize الموروثة من NodeRendererBase مفيدة لإنشاء صور مصغرة لمحتوى المستند. يتم تحديد حجم الشكل من خلال المنشئ. تقبل طريقة RenderToSize كائن Graphics، وإحداثيات X وY لموضع الصورة، وحجم الصورة (العرض والارتفاع) التي سيتم رسمها على كائن Graphics.

يمكن عرض Shape على نطاق معين باستخدام طريقة ShapeRenderer.RenderToScale الموروثة من فئة NodeRendererBase. وهذا مشابه لأسلوب Document.RenderToScale الذي يقبل نفس المعلمات الرئيسية. الفرق بين هاتين الطريقتين هو أنه باستخدام طريقة ShapeRenderer.RenderToScale، بدلاً من الحجم الحرفي، يمكنك اختيار قيمة عائمة تعمل على قياس الشكل أثناء عرضه. إذا كانت القيمة العائمة تساوي 1.0، فسيتم عرض الشكل بنسبة 100% من حجمه الأصلي. ستؤدي القيمة العائمة البالغة 0.5 إلى تقليل حجم الصورة بمقدار النصف.

تقديم صورة الشكل

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

يوضح المثال التالي كيفية عرض صورة الشكل إلى صورة JPEG بشكل منفصل عن المستند وحفظها على القرص:

استرداد حجم الشكل

توفر فئة ShapeRenderer أيضًا وظيفة استرداد حجم الشكل بالبكسل من خلال طريقة GetSizeInPixels. تقبل هذه الطريقة معلمتين عائمتين (مفردتين) - المقياس وDPI، اللتين تستخدمان في حساب حجم الشكل عند عرض الشكل. تقوم الطريقة بإرجاع كائن Size، الذي يحتوي على عرض وارتفاع الحجم المحسوب. يكون هذا مفيدًا عندما يكون مطلوبًا معرفة حجم الشكل المعروض مسبقًا، على سبيل المثال عند إنشاء صورة نقطية جديدة من المخرجات المعروضة.

يوضح المثال أدناه كيفية إنشاء كائن نقطي ورسومات جديد بعرض وارتفاع الشكل المراد عرضه:

عند استخدام أساليب RenderToSize أو RenderToScale، يتم أيضًا إرجاع حجم الصورة المعروضة في كائن SizeF. يمكن تعيين هذا لمتغير واستخدامه إذا لزم الأمر.

تقوم الخاصية SizeInPoints بإرجاع حجم الشكل المقاس بالنقاط (راجع ShapeRenderer. والنتيجة هي كائن SizeF يحتوي على العرض والارتفاع.