کار با تصاویر

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

درج تصویر

DocumentBuilder چندین بار اضافه بار از روش insert_image را ارائه می دهد که به شما امکان می دهد یک تصویر درون خطی یا شناور را وارد کنید. اگر تصویر یک متافیل EMF یا WMF باشد، در قالب متافایل در سند درج می شود. تمام تصاویر دیگر در فرمت PNG ذخیره خواهند شد. روش insert_image می تواند از تصاویر منابع مختلف استفاده کند:

  • از یک فایل یا URL با ارسال پارامتر رشته
  • از یک جریان با عبور یک پارامتر Stream
  • از یک آرایه بایت با ارسال پارامتر آرایه بایت

برای هر یک از روش های insert_image، اضافه بارهای بیشتری وجود دارد که به شما امکان می دهد تصویری را با گزینه های زیر وارد کنید:

  • درون خطی یا شناور در یک موقعیت خاص، به عنوان مثال، insert_image
  • مقیاس درصد یا اندازه سفارشی. علاوه بر این، روش DocumentBuilder.insert_image یک شی Shape را که به تازگی ایجاد و درج شده است برمی گرداند تا بتوانید ویژگی های Shape را بیشتر تغییر دهید

درج تصویر درون خطی

یک رشته که نشان دهنده فایلی است که حاوی تصویر است را به insert_image ارسال کنید تا تصویر را به عنوان یک گرافیک درون خطی در سند وارد کنید.

مثال کد زیر نحوه درج یک تصویر درون خطی در موقعیت مکان نما را در یک سند نشان می دهد:

doc = aw.Document()
builder = aw.DocumentBuilder(doc)

builder.insert_image(docs_base.images_dir + "Logo.jpg")

doc.save(docs_base.artifacts_dir+"WorkingWithImages.document_builder_insert_inline_image.doc")

درج یک تصویر شناور (کاملاً در موقعیت)

مثال کد زیر نحوه درج یک تصویر شناور از یک فایل یا URL را در موقعیت و اندازه مشخص نشان می دهد:

doc = aw.Document()
builder = aw.DocumentBuilder(doc)

builder.insert_image(docs_base.images_dir + "Logo.jpg",
    aw.drawing.RelativeHorizontalPosition.MARGIN,
    100,
    aw.drawing.RelativeVerticalPosition.MARGIN,
    100,
    200,
    100,
    aw.drawing.WrapType.SQUARE)

doc.save(docs_base.artifacts_dir+"WorkingWithImages.document_builder_insert_floating_image.doc")

نحوه استخراج تصاویر از یک سند

همه تصاویر در داخل گره های Shape در یک Document ذخیره می شوند. برای استخراج تمام تصاویر یا تصاویر دارای نوع خاص از سند، مراحل زیر را دنبال کنید:

  • از روش Document.get_child_nodes برای انتخاب تمام گره های Shape استفاده کنید.
  • تکرار از طریق مجموعه گره های حاصل.
  • خاصیت بولی Shape.has_image را بررسی کنید.
  • استخراج داده های تصویر با استفاده از ویژگی Shape.image_data.
  • داده های تصویر را در یک فایل ذخیره کنید.

مثال کد زیر نحوه استخراج تصاویر از یک سند و ذخیره آنها به عنوان فایل را نشان می دهد:

فایل قالب این نمونه را می توانید از اینجا دانلود کنید.

نحوه درج بارکد در هر صفحه از یک سند

این مثال به شما نشان می دهد که بارکدهای یکسان یا متفاوت را در تمام یا صفحات خاص یک سند Word اضافه کنید. هیچ راه مستقیمی برای افزودن بارکد در تمام صفحات یک سند وجود ندارد، اما می‌توانید از روش‌های move_to_section، move_to_header_footer و insert_image برای رفتن به هر بخش یا سرصفحه/پانویسی استفاده کنید و تصاویر بارکد را همانطور که در کد زیر مشاهده می‌کنید وارد کنید.

مثال کد زیر یک تصویر بارکد را در هر صفحه از یک سند درج می کند.

قفل نسبت تصویر

نسبت ابعاد یک شکل هندسی، نسبت اندازه های آن در ابعاد مختلف است. با استفاده از aspect_ratio_locked می توانید نسبت تصویر را قفل کنید. مقدار پیش فرض نسبت ابعاد شکل به ShapeType بستگی دارد. این True برای ShapeType.IMAGE و False برای سایر انواع شکل است.

مثال کد زیر نحوه کار با نسبت ابعاد را نشان می دهد:

doc = aw.Document()
builder = aw.DocumentBuilder(doc)

shape = builder.insert_image(docs_base.images_dir + "Logo.jpg")
shape.aspect_ratio_locked = False

doc.save(docs_base.artifacts_dir+"WorkingWithImages.set_aspect_ratio_locked.doc")

چگونه مرزهای واقعی شکل را در نقاط بدست آوریم

اگر می‌خواهید کادر واقعی شکل را همانطور که در صفحه نمایش داده شده است، با استفاده از ویژگی bounds_in_points به دست آورید.

مثال کد زیر نحوه استفاده از این ویژگی را نشان می دهد:

doc = aw.Document()
builder = aw.DocumentBuilder(doc)

shape = builder.insert_image(docs_base.images_dir + "Logo.jpg")
shape.aspect_ratio_locked = False

print("\nGets the actual bounds of the shape in points.")
rect = shape.get_shape_renderer().bounds_in_points
print(f"{rect.x}, {rect.y}, {rect.width}, {rect.height}")

برش تصاویر

برش یک تصویر معمولاً به حذف قسمت های بیرونی ناخواسته تصویر برای کمک به بهبود کادربندی اشاره دارد. همچنین برای حذف برخی از بخش‌های تصویر برای افزایش فوکوس روی یک ناحیه خاص استفاده می‌شود.

مثال کد زیر نحوه دستیابی به این هدف را با استفاده از Aspose.Words API نشان می دهد:

# The path to the documents directory.
inputPath = docs_base.images_dir + "Logo.jpg"
outputPath = docs_base.artifacts_dir + "cropped_logo.jpg"

self.crop_image(inputPath,outputPath, 100, 90, 200, 200)
@staticmethod
def crop_image(inPath : str, outPath : str, left : int, top : int, width : int, height : int) :
    
    doc = aw.Document();
    builder = aw.DocumentBuilder(doc)
    
    croppedImage = builder.insert_image(inPath)
    
    src_width_points = croppedImage.width
    src_height_points = croppedImage.height
    
    croppedImage.width = aw.ConvertUtil.pixel_to_point(width)
    croppedImage.height = aw.ConvertUtil.pixel_to_point(height)
    
    widthRatio = croppedImage.width / src_width_points
    heightRatio = croppedImage.height / src_height_points
    
    if (widthRatio< 1) :
        croppedImage.image_data.crop_right = 1 - widthRatio
    
    if (heightRatio< 1) :
        croppedImage.image_data.crop_bottom = 1 - heightRatio
    
    leftToWidth = aw.ConvertUtil.pixel_to_point(left) / src_width_points
    topToHeight = aw.ConvertUtil.pixel_to_point(top) / src_height_points
    
    croppedImage.image_data.crop_left = leftToWidth
    croppedImage.image_data.crop_right = croppedImage.image_data.crop_right - leftToWidth
    
    croppedImage.image_data.crop_top = topToHeight
    croppedImage.image_data.crop_bottom = croppedImage.image_data.crop_bottom - topToHeight
    
    croppedImage.get_shape_renderer().save(outPath, aw.saving.ImageSaveOptions(aw.SaveFormat.JPEG))

ذخیره تصاویر به عنوان WMF

Aspose.Words عملکردی را برای ذخیره تمام تصاویر موجود در یک سند به فرمت WMF در حین تبدیل DOCX به RTF فراهم می کند.

مثال کد زیر نحوه ذخیره تصاویر را به عنوان WMF با گزینه های ذخیره RTF نشان می دهد: