رندر کردن اشکال جدا از یک سند

هنگام پردازش اسناد، یک کار رایج استخراج تمام تصاویر موجود در سند و صادر کردن آنها به یک مکان خارجی است. این کار با Aspose.Words API که در حال حاضر قابلیت استخراج و ذخیره داده های تصویر را فراهم می کند، ساده می شود. با این حال، گاهی اوقات ممکن است بخواهید به طور مشابه انواع دیگری از محتوای گرافیکی را استخراج کنید که با نوع دیگری از شی ترسیمی نشان داده می شود، به عنوان مثال، یک جعبه متن حاوی پاراگراف ها، شکل های فلش و یک تصویر کوچک. هیچ راه ساده ای برای رندر کردن این شی وجود ندارد زیرا ترکیبی از عناصر محتوای فردی است. همچنین ممکن است با موردی مواجه شوید که محتویات با هم در شیئی که شبیه یک تصویر واحد است، گروه بندی شده باشند.

Aspose.Words عملکردی را برای استخراج این نوع محتوا فراهم می کند به همان روشی که می توانید یک تصویر ساده را از یک شکل به عنوان محتوای رندر شده استخراج کنید. این مقاله نحوه استفاده از این قابلیت را برای ارائه اشکال مستقل از سند شرح می دهد.

انواع شکل در Aspose.Words

تمام محتوای یک لایه ترسیم سند توسط گره Shape یا GroupShape در ماژول شی سند Aspose.Words (DOM) نشان داده می شود. چنین محتویاتی می توانند جعبه های متن، تصاویر، AutoShapes، اشیاء 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 اشیایی را در لایه ترسیم نشان می دهد، مانند AutoShape، جعبه متن، فرم آزاد، شی OLE، کنترل ActiveX یا یک عکس. با استفاده از کلاس Shape، می توانید اشکال را در یک سند Microsoft Word ایجاد یا تغییر دهید. ویژگی مهم یک شکل shape_type آن است. اشکال از انواع مختلف می توانند قابلیت های متفاوتی در یک سند Word داشته باشند. برای مثال، فقط شکل‌های تصویر و OLE می‌توانند تصاویر درون خود داشته باشند، در حالی که بیشتر شکل‌ها فقط می‌توانند متن داشته باشند.

مثال زیر نشان می دهد که چگونه می توان یک تصویر Shape را به یک تصویر 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 ارائه می دهد. این روش دو پارامتر شناور (Single) - مقیاس و DPI را می پذیرد که در محاسبه اندازه شکل هنگام ارائه شکل استفاده می شود. متد شی Size را برمی گرداند که شامل عرض و ارتفاع اندازه محاسبه شده است. این زمانی مفید است که لازم است از قبل اندازه شکل رندر شده را بدانید. ویژگی size_in_points اندازه Shape اندازه گیری شده بر حسب نقاط را برمی گرداند. نتیجه یک شی SizeF حاوی عرض و ارتفاع است. همچنین می توانید از ویژگی bounds_in_points برای بدست آوردن مرزهای واقعی شکل استفاده کنید.