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

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

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

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

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

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

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 من خلال أسلوب get_shape_renderer أو عن طريق تمرير Shape إلى مُنشئ فئة ShapeRenderer. توفر هذه الفئة الوصول إلى الأعضاء، مما يسمح بتقديم شكل لما يلي:

  • الملف على القرص
  • تدفق

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

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

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

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

r = shape.get_shape_renderer()

# Define custom options which control how the image is rendered. Render the shape to the JPEG raster format.
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.EMF)
imageOptions.scale = 1.5
        
# Save the rendered image to disk.
r.save(docs_base.artifacts_dir + "TestFile.RenderToDisk_out.emf", imageOptions)

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

r = shape.get_shape_renderer()

# Define custom options which control how the image is rendered. Render the shape to the vector format EMF.
imageOptions = aw.saving.ImageSaveOptions(aw.SaveFormat.JPEG)
        
# Output the image in gray scale
imageOptions.image_color_mode = aw.saving.ImageColorMode.GRAYSCALE

# Reduce the brightness a bit (default is 0.5f).
imageOptions.image_brightness = 0.45
        
stream =  io.FileIO(docs_base.artifacts_dir + "TestFile.RenderToStream_out.jpg", "w+b")

# Save the rendered image to the stream using different options.
r.save(stream, imageOptions)

# Close the stream
stream.close()

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

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

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

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

# Save the rendered image to disk.
shape.get_shape_renderer().save(docs_base.artifacts_dir + "TestFile.RenderShapeImage.jpeg", None)

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

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