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

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

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

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

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

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

rendering-shapes-separately-from-a-document-aspose-words-cpp-1

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

rendering-shapes-separately-from-a-document-aspose-words-cpp-2

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

rendering-shapes-separately-from-a-document-aspose-words-cpp-3

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

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

  • ملف على القرص باستخدام طريقة Save الزائد
  • تيار باستخدام طريقة Save الزائد
  • الكائن Graphics باستخدام طرق 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، والإحداثيات س و ص لموضع الصورة، وحجم الصورة (العرض والارتفاع) التي سيتم رسمها على الكائن Graphics.

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

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

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

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

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

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

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

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

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