مدیریت پاراگراف‌های متنی PowerPoint در Python

معرفی

Aspose.Slides کلاس‌هایی را که برای کار با متن PowerPoint در Python نیاز دارید، فراهم می‌کند.

  • Aspose.Slides کلاس TextFrame را برای ایجاد اشیاء قاب متن فراهم می‌کند. یک شیء TextFrame می‌تواند یک یا چند پاراگراف را شامل شود (هر پاراگراف با یک بازگشت کاراکتر جدا می‌شود).
  • Aspose.Slides کلاس Paragraph را برای ایجاد اشیاء پاراگراف فراهم می‌کند. یک شیء Paragraph می‌تواند یک یا چند بخش متن را شامل شود.
  • Aspose.Slides کلاس Portion را برای ایجاد اشیاء بخش متن و تعیین ویژگی‌های قالب‌بندی آن‌ها فراهم می‌کند.

یک شیء Paragraph می‌تواند متنی با ویژگی‌های قالب‌بندی مختلف را از طریق اشیاء Portion زیربنایی خود مدیریت کند.

افزودن چندین پاراگراف حاوی چندین بخش

این مراحل نشان می‌دهند چگونه یک قاب متن حاوی سه پاراگراف، که هر کدام شامل سه بخش هستند، اضافه کنیم:

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. یک مرجع به اسلاید هدف با استفاده از اندیس آن به دست آورید.
  3. یک AutoShape مستطیلی به اسلاید اضافه کنید.
  4. کلاس TextFrame مرتبط با AutoShape را دریافت کنید.
  5. دو شیء Paragraph ایجاد کنید و آن‌ها را به مجموعه پاراگراف‌های TextFrame اضافه کنید (به همراه پاراگراف پیش‌فرض، این کار سه پاراگراف ایجاد می‌کند).
  6. برای هر پاراگراف، سه شیء Portion ایجاد کنید و به مجموعه بخش‌های آن پاراگراف اضافه کنید.
  7. متن هر بخش را تنظیم کنید.
  8. هر بخش متن را با استفاده از ویژگی‌های ارائه‌شده توسط Portion قالب‌بندی مورد نظر اعمال کنید.
  9. ارائه (پرزنتیشن) تغییر یافته را ذخیره کنید.
import aspose.slides as slides
import aspose.pydrawing as draw

# نمونه‌سازی کلاس Presentation برای ایجاد یک فایل PPTX جدید.
with slides.Presentation() as presentation:

    # دسترسی به اولین اسلاید.
    slide = presentation.slides[0]

    # افزودن یک AutoShape مستطیلی.
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 150, 300, 150)

    # دسترسی به TextFrame شکل AutoShape.
    text_frame = shape.text_frame

    # ایجاد پاراگراف‌ها و بخش‌ها؛ قالب‌بندی در ادامه اعمال می‌شود.
    paragraph0 = text_frame.paragraphs[0]
    portion01 = slides.Portion()
    portion02 = slides.Portion()
    paragraph0.portions.add(portion01)
    paragraph0.portions.add(portion02)

    paragraph1 = slides.Paragraph()
    text_frame.paragraphs.add(paragraph1)
    portion10 = slides.Portion()
    portion11 = slides.Portion()
    portion12 = slides.Portion()
    paragraph1.portions.add(portion10)
    paragraph1.portions.add(portion11)
    paragraph1.portions.add(portion12)

    paragraph2 = slides.Paragraph()
    text_frame.paragraphs.add(paragraph2)
    portion20 = slides.Portion()
    portion21 = slides.Portion()
    portion22 = slides.Portion()
    paragraph2.portions.add(portion20)
    paragraph2.portions.add(portion21)
    paragraph2.portions.add(portion22)

    for i in range(3):
        for j in range(3):
            text_frame.paragraphs[i].portions[j].text = "Portion0" + str(j)
            if j == 0:
                text_frame.paragraphs[i].portions[j].portion_format.fill_format.fill_type = slides.FillType.SOLID
                text_frame.paragraphs[i].portions[j].portion_format.fill_format.solid_fill_color.color = draw.Color.red
                text_frame.paragraphs[i].portions[j].portion_format.font_bold = 1
                text_frame.paragraphs[i].portions[j].portion_format.font_height = 15
            elif j == 1:
                text_frame.paragraphs[i].portions[j].portion_format.fill_format.fill_type = slides.FillType.SOLID
                text_frame.paragraphs[i].portions[j].portion_format.fill_format.solid_fill_color.color = draw.Color.blue
                text_frame.paragraphs[i].portions[j].portion_format.font_italic = 1
                text_frame.paragraphs[i].portions[j].portion_format.font_height = 18

    # ذخیره‌سازی PPTX بر روی دیسک.
    presentation.save("paragraphs_and_portions_out.pptx", slides.export.SaveFormat.PPTX)

مدیریت بولت‌های پاراگراف

فهرست‌های بولت به شما کمک می‌کنند تا اطلاعات را به‌سرعت و به‌کارآمدی سازماندهی و ارائه کنید. پاراگراف‌های بولت‌دار اغلب خواندن و درک آن‌ها آسان‌تر است.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. اسلاید هدف را با استفاده از اندیس آن دسترسی پیدا کنید.
  3. یک AutoShape به اسلاید اضافه کنید.
  4. TextFrame شکل را دسترسی پیدا کنید.
  5. پاراگراف پیش‌فرض را از TextFrame حذف کنید.
  6. اولین پاراگراف را با استفاده از کلاس Paragraph ایجاد کنید.
  7. نوع بولت پاراگراف را به SYMBOL تنظیم کنید و کاراکتر بولت را مشخص کنید.
  8. متن پاراگراف را تنظیم کنید.
  9. فاصله بولت (indent) برای پاراگراف را تنظیم کنید.
  10. رنگ بولت را تنظیم کنید.
  11. اندازه (ارتفاع) بولت را تنظیم کنید.
  12. پاراگراف را به مجموعه پاراگراف‌های TextFrame اضافه کنید.
  13. پاراگراف دوم را اضافه کنید و مراحل ۷ تا ۱۲ را تکرار کنید.
  14. ارائه را ذخیره کنید.
import aspose.slides as slides
import aspose.pydrawing as draw

# یک نمونه از کلاس Presentation ایجاد کنید.
with slides.Presentation() as presentation:

    # دسترسی به اولین اسلاید.
    slide = presentation.slides[0]

    # افزودن و دسترسی به یک AutoShape.
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 200, 200, 400, 200)

    # دسترسی به فریم متنی AutoShape ایجادشده.
    text_frame = shape.text_frame

    # حذف پاراگراف پیش‌فرض.
    text_frame.paragraphs.remove_at(0)

    # ایجاد یک پاراگراف.
    paragraph = slides.Paragraph()

    # تنظیم سبک بولت پاراگراف و نماد.
    paragraph.paragraph_format.bullet.type = slides.BulletType.SYMBOL
    paragraph.paragraph_format.bullet.char = chr(8226)

    # تنظیم متن پاراگراف.
    paragraph.text = "Welcome to Aspose.Slides"

    # تنظیم تورفتگی بولت.
    paragraph.paragraph_format.indent = 25

    # تنظیم رنگ بولت.
    paragraph.paragraph_format.bullet.color.color_type = slides.ColorType.RGB
    paragraph.paragraph_format.bullet.color.color = draw.Color.black
    paragraph.paragraph_format.bullet.is_bullet_hard_color = 1 

    # تنظیم ارتفاع بولت.
    paragraph.paragraph_format.bullet.height = 100

    # افزودن پاراگراف به فریم متن.
    text_frame.paragraphs.add(paragraph)

    # ایجاد پاراگراف دوم.
    paragraph2 = slides.Paragraph()

    # تنظیم نوع و سبک بولت پاراگراف.
    paragraph2.paragraph_format.bullet.type = slides.BulletType.NUMBERED
    paragraph2.paragraph_format.bullet.numbered_bullet_style = slides.NumberedBulletStyle.BULLET_CIRCLE_NUM_WDBLACK_PLAIN

    # تنظیم متن پاراگراف.
    paragraph2.text = "This is numbered bullet"

    # تنظیم تورفتگی بولت.
    paragraph2.paragraph_format.indent = 25

    # تنظیم رنگ بولت.
    paragraph2.paragraph_format.bullet.color.color_type = slides.ColorType.RGB
    paragraph2.paragraph_format.bullet.color.color = draw.Color.black
    paragraph2.paragraph_format.bullet.is_bullet_hard_color = 1

    # تنظیم ارتفاع بولت.
    paragraph2.paragraph_format.bullet.height = 100

    # افزودن پاراگراف به فریم متن.
    text_frame.paragraphs.add(paragraph2)

    # ذخیره‌سازی ارائه به صورت فایل PPTX.
    presentation.save("bullets_out.pptx", slides.export.SaveFormat.PPTX)

مدیریت بولت‌های تصویری

فهرست‌های بولت به شما کمک می‌کنند تا اطلاعات را به‌سرعت و به‌کارآمدی سازماندهی و ارائه کنید. بولت‌های تصویری خواندن و درک آسانی دارند.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. اسلاید هدف را با استفاده از اندیس آن دسترسی پیدا کنید.
  3. یک AutoShape به اسلاید اضافه کنید.
  4. TextFrame شکل را دسترسی پیدا کنید.
  5. پاراگراف پیش‌فرض را از TextFrame حذف کنید.
  6. اولین پاراگراف را با استفاده از کلاس Paragraph ایجاد کنید.
  7. یک تصویر را به PPImage بارگذاری کنید.
  8. نوع بولت را به PPImage تنظیم کنید و تصویر را اختصاص دهید.
  9. متن پاراگراف را تنظیم کنید.
  10. فاصله بولت برای پاراگراف را تنظیم کنید.
  11. رنگ بولت را تنظیم کنید.
  12. ارتفاع بولت را تنظیم کنید.
  13. پاراگراف جدید را به مجموعه پاراگراف‌های TextFrame اضافه کنید.
  14. پاراگراف دوم را اضافه کنید و مراحل ۸ تا ۱۲ را تکرار کنید.
  15. ارائه را ذخیره کنید.
import aspose.slides as slides
import aspose.pydrawing as draw

with slides.Presentation() as presentation:

    # دسترسی به اولین اسلاید.
    slide = presentation.slides[0]

    # بارگذاری تصویر بولت.
    image = draw.Bitmap("bullets.png")
    pp_image = presentation.images.add_image(image)

    # افزودن و دسترسی به یک AutoShape.
    auto_shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 200, 200, 400, 200)

    # دسترسی به TextFrame AutoShape ایجادشده.
    text_frame = auto_shape.text_frame

    # حذف پاراگراف پیش‌فرض.
    text_frame.paragraphs.remove_at(0)

    # ایجاد یک پاراگراف جدید.
    paragraph = slides.Paragraph()
    paragraph.text = "Welcome to Aspose.Slides"

    # تنظیم نوع بولت پاراگراف به تصویر و اختصاص تصویر.
    paragraph.paragraph_format.bullet.type = slides.BulletType.PICTURE
    paragraph.paragraph_format.bullet.picture.image = pp_image

    # تنظیم ارتفاع بولت.
    paragraph.paragraph_format.bullet.height = 100

    # افزودن پاراگراف به فریم متن.
    text_frame.paragraphs.add(paragraph)

    # ذخیره‌سازی ارائه به صورت فایل PPTX.
    presentation.save("picture_bullets_out.pptx", slides.export.SaveFormat.PPTX)
    # ذخیره‌سازی ارائه به صورت فایل PPT.
    presentation.save("picture_bullets_out.ppt", slides.export.SaveFormat.PPT)

مدیریت بولت‌های چندسطحی

فهرست‌های بولت به شما کمک می‌کنند تا اطلاعات را به‌سرعت و به‌کارآمدی سازماندهی و ارائه کنید. بولت‌های چندسطحی خواندن و درک آسانی دارند.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. اسلاید هدف را با استفاده از اندیس آن دسترسی پیدا کنید.
  3. یک AutoShape به اسلاید اضافه کنید.
  4. AutoShape‌ی شکل را به TextFrame دسترسی پیدا کنید.
  5. پاراگراف پیش‌فرض را از TextFrame حذف کنید.
  6. پاراگراف اول را با استفاده از کلاس Paragraph ایجاد کنید و عمق (depth) آن را به ۰ تنظیم کنید.
  7. پاراگراف دوم را با استفاده از کلاس Paragraph ایجاد کنید و عمق آن را به ۱ تنظیم کنید.
  8. پاراگراف سوم را با استفاده از کلاس Paragraph ایجاد کنید و عمق آن را به ۲ تنظیم کنید.
  9. پاراگراف چهارم را با استفاده از کلاس Paragraph ایجاد کنید و عمق آن را به ۳ تنظیم کنید.
  10. پاراگراف‌های جدید را به مجموعه پاراگراف‌های TextFrame اضافه کنید.
  11. ارائه را ذخیره کنید.
import aspose.slides as slides
import aspose.pydrawing as draw

# یک نمونه از کلاس Presentation ایجاد کنید.
with slides.Presentation() as presentation:

    # دسترسی به اولین اسلاید.
    slide = presentation.slides[0]
    
    # افزودن یک AutoShape.
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 200, 200, 400, 200)

    # دسترسی به TextFrame AutoShape ایجادشده.
    text_frame = auto_shape.text_frame
    
    # پاک‌سازی پاراگراف پیش‌فرض.
    text_frame.paragraphs.clear()

    # افزودن پاراگراف اول.
    paragraph1 = slides.Paragraph()
    paragraph1.text = "Content"
    paragraph1.paragraph_format.bullet.type = slides.BulletType.SYMBOL
    paragraph1.paragraph_format.bullet.char = chr(8226)
    paragraph1.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    paragraph1.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    # تنظیم سطح بولت.
    paragraph1.paragraph_format.depth = 0

    # افزودن پاراگراف دوم.
    paragraph2 = slides.Paragraph()
    paragraph2.text = "Second Level"
    paragraph2.paragraph_format.bullet.type = slides.BulletType.SYMBOL
    paragraph2.paragraph_format.bullet.char = '-'
    paragraph2.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    paragraph2.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    # تنظیم سطح بولت.
    paragraph2.paragraph_format.depth = 1

    # افزودن پاراگراف سوم.
    paragraph3 = slides.Paragraph()
    paragraph3.text = "Third Level"
    paragraph3.paragraph_format.bullet.type = slides.BulletType.SYMBOL
    paragraph3.paragraph_format.bullet.char = chr(8226)
    paragraph3.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    paragraph3.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    # تنظیم سطح بولت.
    paragraph3.paragraph_format.depth = 2

    # افزودن پاراگراف چهارم.
    paragraph4 = slides.Paragraph()
    paragraph4.text = "Fourth Level"
    paragraph4.paragraph_format.bullet.type = slides.BulletType.SYMBOL
    paragraph4.paragraph_format.bullet.char = '-'
    paragraph4.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    paragraph4.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    # تنظیم سطح بولت.
    paragraph4.paragraph_format.depth = 3

    # افزودن پاراگراف‌ها به مجموعه.
    text_frame.paragraphs.add(paragraph1)
    text_frame.paragraphs.add(paragraph2)
    text_frame.paragraphs.add(paragraph3)
    text_frame.paragraphs.add(paragraph4)

    # ذخیره‌سازی ارائه به صورت فایل PPTX.
    presentation.save("multilevel_bullets_out.pptx", slides.export.SaveFormat.PPTX)

مدیریت پاراگراف‌ها با فهرست شماره‌گذاری سفارشی

کلاس BulletFormat ویژگی numbered_bullet_start_with (و سایر ویژگی‌ها) را برای کنترل شماره‌گذاری سفارشی و قالب‌بندی پاراگراف‌ها فراهم می‌کند.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. اسلایدی که قرار است پاراگراف‌ها را دربردارد، دسترسی پیدا کنید.
  3. یک AutoShape به اسلاید اضافه کنید.
  4. TextFrame شکل را دسترسی پیدا کنید.
  5. پاراگراف پیش‌فرض را از TextFrame حذف کنید.
  6. پاراگراف اول را ایجاد کنید و numbered_bullet_start_with را روی ۲ تنظیم کنید.
  7. پاراگراف دوم را ایجاد کنید و numbered_bullet_start_with راوی ۳ تنظیم کنید.
  8. پاراگراف سوم را ایجاد کنید و numbered_bullet_start_with راروی ۷ تنظیم کنید.
  9. پاراگراف‌ها را به مجموعه TextFrame اضافه کنید.
  10. ارائه را ذخیره کنید.
import aspose.slides as slides

with slides.Presentation() as presentation:

    # افزودن و دسترسی به یک AutoShape.
    shape = presentation.slides[0].shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 200, 200, 400, 200)

    # دسترسی به TextFrame AutoShape ایجادشده.
    text_frame = shape.text_frame

    # حذف پاراگراف پیش‌فرض موجود.
    text_frame.paragraphs.remove_at(0)

    # ایجاد اولین مورد شماره‌دار (شروع از ۲، سطح عمق ۴).
    paragraph1 = slides.Paragraph()
    paragraph1.text = "bullet 2"
    paragraph1.paragraph_format.depth = 4 
    paragraph1.paragraph_format.bullet.numbered_bullet_start_with = 2
    paragraph1.paragraph_format.bullet.type = slides.BulletType.NUMBERED
    text_frame.paragraphs.add(paragraph1)

    # ایجاد دومین مورد شماره‌دار (شروع از ۳، سطح عمق ۴).
    paragraph2 = slides.Paragraph()
    paragraph2.text = "bullet 3"
    paragraph2.paragraph_format.depth = 4
    paragraph2.paragraph_format.bullet.numbered_bullet_start_with = 3 
    paragraph2.paragraph_format.bullet.type = slides.BulletType.NUMBERED  
    text_frame.paragraphs.add(paragraph2)

    # ایجاد سومین مورد شماره‌دار (شروع از ۷، سطح عمق ۴).
    paragraph5 = slides.Paragraph()
    paragraph5.text = "bullet 7"
    paragraph5.paragraph_format.depth = 4
    paragraph5.paragraph_format.bullet.numbered_bullet_start_with = 7
    paragraph5.paragraph_format.bullet.type = slides.BulletType.NUMBERED
    text_frame.paragraphs.add(paragraph5)

    presentation.save("custom_bullets_out.pptx", slides.export.SaveFormat.PPTX)

تنظیم تورفتگی خط اول برای یک پاراگراف

از ویژگی ParagraphFormat.indent برای کنترل تورفتگی خط اول یک پاراگراف استفاده کنید. این ویژگی فقط خط اول را نسبت به حاشیه چپ پاراگراف منتقل می‌کند. مقدار مثبت خط اول را به راست می‌برد، در حالی که خطوط باقی‌مانده به بدنه پاراگراف تراز می‌شوند.

زمانی که نیاز به جابجایی کل پاراگراف دارید، از ParagraphFormat.margin_left استفاده کنید. زمانی که فقط خط اول را می‌خواهید جابجا کنید، از ParagraphFormat.indent استفاده کنید.

مثال زیر چند پاراگراف ایجاد می‌کند و مقادیر مختلف indent را برای نشان دادن تأثیر تورفتگی خط اول بر چیدمان پاراگراف اعمال می‌کند.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. اسلاید هدف را دسترسی پیدا کنید.
  3. یک AutoShape مستطیلی به اسلاید اضافه کنید.
  4. یک TextFrame خالی به شکل اضافه کنید و پاراگراف پیش‌فرض را حذف کنید.
  5. چندین پاراگراف ایجاد کنید و مقادیر مختلف indent را برای آن‌ها تنظیم کنید.
  6. پاراگراف‌ها را به قاب متن اضافه کنید.
  7. ارائه تغییر یافته را ذخیره کنید.
import aspose.slides as slides
import aspose.pydrawing as draw

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    rectangle = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 420, 220)
    rectangle.fill_format.fill_type = slides.FillType.NO_FILL
    rectangle.line_format.fill_format.fill_type = slides.FillType.SOLID
    rectangle.line_format.fill_format.solid_fill_color.color = draw.Color.gray

    text_frame = rectangle.add_text_frame("")
    text_frame.text_frame_format.autofit_type = slides.TextAutofitType.SHAPE
    text_frame.paragraphs.remove_at(0)

    first_paragraph = slides.Paragraph()
    first_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    first_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    first_paragraph.text = "No first-line indent. Wrapped lines start at the same position as the first line."
    first_paragraph.paragraph_format.margin_left = 20.0
    first_paragraph.paragraph_format.indent = 0.0

    second_paragraph = slides.Paragraph()
    second_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    second_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    second_paragraph.text = "First-line indent of 20 points. The first line moves to the right, while wrapped lines remain aligned to the paragraph body."
    second_paragraph.paragraph_format.margin_left = 20.0
    second_paragraph.paragraph_format.indent = 20.0

    third_paragraph = slides.Paragraph()
    third_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    third_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    third_paragraph.text = "First-line indent of 40 points. This paragraph shows a larger first-line offset to make the effect easier to see."
    third_paragraph.paragraph_format.margin_left = 20.0
    third_paragraph.paragraph_format.indent = 40.0

    text_frame.paragraphs.add(first_paragraph)
    text_frame.paragraphs.add(second_paragraph)
    text_frame.paragraphs.add(third_paragraph)

    presentation.save("paragraph_indent.pptx", slides.export.SaveFormat.PPTX)

نتیجه:

تورفتگی خط اول پاراگراف‌ها

تنظیم تورفتگی آویزان برای یک پاراگراف

تورفتگی آویزان یک چیدمان پاراگراف است که در آن خط اول به سمت چپ خطوط باقی‌مانده شروع می‌شود. در Aspose.Slides، این اثر را با ویژگی ParagraphFormat.indent ایجاد می‌کنید. indent را به مقدار منفی تنظیم کنید تا خط اول نسبت به بدنه پاراگراف به سمت چپ حرکت کند.

در عمل، ParagraphFormat.margin_left موقعیت چپ بدنه پاراگراف را تعریف می‌کند و ParagraphFormat.indent موقعیت خط اول نسبت به آن حاشیه را تعیین می‌کند. برای ایجاد تورفتگی آویزان، مقدار مثبت margin_left و مقدار منفی indent تنظیم کنید.

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

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. اسلاید هدف را دسترسی پیدا کنید.
  3. یک AutoShape مستطیلی به اسلاید اضافه کنید.
  4. یک TextFrame خالی به شکل اضافه کنید و پاراگراف پیش‌فرض را حذف کنید.
  5. برای هر پاراگراف مقدار مثبت margin_left تنظیم کنید.
  6. مقدار منفی indent را تنظیم کنید تا اثر تورفتگی آویزان ایجاد شود.
  7. پاراگراف‌ها را به قاب متن اضافه کنید.
  8. ارائه تغییر یافته را ذخیره کنید.
with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    rectangle = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 420, 220)
    rectangle.fill_format.fill_type = slides.FillType.NO_FILL
    rectangle.line_format.fill_format.fill_type = slides.FillType.SOLID
    rectangle.line_format.fill_format.solid_fill_color.color = draw.Color.gray

    text_frame = rectangle.add_text_frame("")
    text_frame.text_frame_format.autofit_type = slides.TextAutofitType.SHAPE
    text_frame.paragraphs.remove_at(0)

    first_paragraph = slides.Paragraph()
    first_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    first_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    first_paragraph.text = "A hanging indent is created by combining a positive left margin with a negative indent. The first line starts to the left, while wrapped lines align with the paragraph body."
    first_paragraph.paragraph_format.margin_left = 40.0
    first_paragraph.paragraph_format.indent = -20.0

    second_paragraph = slides.Paragraph()
    second_paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    second_paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.black
    second_paragraph.text = "This second example uses a deeper hanging indent so the difference between the first line and the wrapped lines is easier to compare."
    second_paragraph.paragraph_format.margin_left = 60.0
    second_paragraph.paragraph_format.indent = -30.0

    text_frame.paragraphs.add(first_paragraph)
    text_frame.paragraphs.add(second_paragraph)

    presentation.save("hanging_indent.pptx", slides.export.SaveFormat.PPTX)

نتیجه:

تورفتگی آویزان پاراگراف‌ها

مدیریت قالب‌بندی بخش انتهای پاراگراف

هنگامی که نیاز به کنترل استایل «پایان» یک پاراگراف (قالب‌بندی اعمال‌شده پس از آخرین بخش متن) دارید، از ویژگی end_paragraph_portion_format استفاده کنید. مثال زیر فونت Times New Roman بزرگ‌تری را به انتهای پاراگراف دوم اعمال می‌کند.

  1. یک یا یک فایل Presentation را ایجاد یا باز کنید.
  2. اسلاید هدف را بر اساس اندیس دریافت کنید.
  3. یک AutoShape مستطیلی به اسلاید اضافه کنید.
  4. از TextFrame شکل استفاده کنید و دو پاراگراف ایجاد کنید.
  5. یک PortionFormat با اندازه ۴۸ پوینت Times New Roman تنظیم کنید و به عنوان قالب انتهایی بخش پاراگراف اعمال کنید.
  6. آن را به ویژگی end_paragraph_portion_format پاراگراف اختصاص دهید (بر روی انتهای پاراگراف دوم اعمال می‌شود).
  7. ارائه اصلاح‌شده را به صورت فایل PPTX بنویسید.
import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
	shape = presentation.slides[0].shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 200, 250)

	paragraph1 = slides.Paragraph()
	paragraph1.portions.add(slides.Portion("Sample text"))

	end_paragraph_portion_format = slides.PortionFormat()
	end_paragraph_portion_format.font_height = 48
	end_paragraph_portion_format.latin_font = slides.FontData("Times New Roman")

	paragraph2 = slides.Paragraph()
	paragraph2.portions.add(slides.Portion("Sample text 2"))
	paragraph2.end_paragraph_portion_format = end_paragraph_portion_format

	shape.text_frame.paragraphs.add(paragraph1)
	shape.text_frame.paragraphs.add(paragraph2)

	presentation.save("presentation.pptx", slides.export.SaveFormat.PPTX)

وارد کردن متن HTML به پاراگراف‌ها

Aspose.Slides پشتیبانی پیشرفته‌ای برای وارد کردن متن HTML به پاراگراف‌ها فراهم می‌کند.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. اسلاید هدف را بر اساس اندیس آن دسترسی پیدا کنید.
  3. یک AutoShape به اسلاید اضافه کنید.
  4. TextFrame AutoShape را دسترسی پیدا کنید.
  5. پاراگراف پیش‌فرض را از TextFrame حذف کنید.
  6. فایل HTML منبع را بخوانید.
  7. پاراگراف اول را با استفاده از کلاس Paragraph ایجاد کنید.
  8. محتوای HTML را به مجموعه پاراگراف‌های TextFrame اضافه کنید.
  9. ارائه تغییر یافته را ذخیره کنید.
import aspose.slides as slides

# یک نمونه خالی از کلاس Presentation ایجاد کنید.
with slides.Presentation() as presentation:

    # دسترسی به اولین اسلاید ارائه.
    slide = presentation.slides[0]

    slide_width = presentation.slide_size.size.width
    slide_height = presentation.slide_size.size.height

    # افزودن یک AutoShape برای درج محتوای HTML.
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, slide_width - 20, slide_height - 10)

    # پاک‌سازی تمام پاراگراف‌ها در فریم متنی اضافه‌شده.
    shape.text_frame.paragraphs.clear()

    # بارگذاری فایل HTML.
    with open("file.html", "rt") as html_stream:
        # افزودن متن از فایل HTML به فریم متن.
        shape.text_frame.paragraphs.add_from_html(html_stream.read())

    # ذخیره‌سازی ارائه.
    presentation.save("output.pptx", slides.export.SaveFormat.PPTX)

صادرات متن پاراگراف به HTML

Aspose.Slides پشتیبانی پیشرفته‌ای برای صادرات متن به HTML فراهم می‌کند.

  1. یک نمونه از کلاس Presentation ایجاد کنید و ارائه هدف را بارگذاری کنید.
  2. اسلاید دلخواه را بر اساس اندیس آن دسترسی پیدا کنید.
  3. شکلی را که شامل متن مورد نظر برای صادرات است، انتخاب کنید.
  4. TextFrame شکل را دسترسی پیدا کنید.
  5. یک جریان فایل باز کنید تا خروجی HTML را بنویسید.
  6. اندیس شروع را مشخص کنید و پاراگراف‌های مورد نیاز را صادر کنید.
import aspose.slides as slides

# فایل ارائه را بارگذاری کنید.
with slides.Presentation("exporting_HTML_text.pptx") as presentation:
    # دسترسی به اولین اسلاید ارائه.
    slide = presentation.slides[0]

    # اندیس شکل هدف.
    index = 0

    # دسترسی به شکل بر اساس اندیس.
    shape = slide.shapes[index]

    with open("output.html", "w") as html_stream:
        # داده‌های پاراگراف را به HTML بنویسید؛ با ارائه اندیس شروع پاراگراف و تعداد کل پاراگراف‌های صادرشده.
        html_stream.write(shape.text_frame.paragraphs.export_to_html(0, shape.text_frame.paragraphs.count, None))

ذخیره یک پاراگراف به‌عنوان تصویر

در این بخش دو مثال بررسی می‌شود که نشان می‌دهد چگونه یک پاراگراف متنی، که توسط کلاس Paragraph نمایش داده می‌شود، به‌عنوان تصویر ذخیره می‌شود. هر دو مثال شامل به‌دست‌آوردن تصویر یک شکل حاوی پاراگراف با استفاده از متدهای get_image از کلاس Shape، محاسبه مرزهای پاراگراف درون شکل و صادرات آن به‌عنوان تصویر بیت‌مپ است. این روش‌ها به شما امکان می‌دهند بخش‌های خاصی از متن را از ارائه‌های PowerPoint استخراج کرده و به‌عنوان تصاویر جداگانه ذخیره کنید که می‌تواند در سناریوهای مختلف مفید باشد.

فرض کنید فایلی به نام sample.pptx داریم که شامل یک اسلاید است و اولین شکل آن یک جعبه متن حاوی سه پاراگراف است.

جعبه متن با سه پاراگراف

مثال 1

در این مثال، پاراگراف دوم را به‌عنوان تصویر به‌دست می‌آوریم. برای این کار، تصویر شکل را از اولین اسلاید ارائه استخراج می‌کنیم و سپس مرزهای پاراگراف دوم در قاب متن شکل را محاسبه می‌کنیم. سپس پاراگراف روی یک بیت‌مپ جدید رسم می‌شود و به‌صورت PNG ذخیره می‌شود. این روش به‌ویژه وقتی مفید است که بخواهید یک پاراگراف خاص را به‌عنوان تصویر جداگانه ذخیره کنید در حالی که ابعاد و قالب‌بندی دقیق متن حفظ می‌شود.

import aspose.slides as slides
import math
import io
from PIL import Image

with slides.Presentation("sample.pptx") as presentation:
    first_shape = presentation.slides[0].shapes[0]

    # شکل را در حافظه به‌صورت bitmap ذخیره کنید.
    with first_shape.get_image() as shape_image:
        shape_image_stream = io.BytesIO()
        shape_image.save(shape_image_stream, slides.ImageFormat.PNG)

    # یک bitmap برای شکل از حافظه ایجاد کنید.
    shape_image_stream.seek(0)
    shape_bitmap = Image.open(shape_image_stream)

    # مرزهای پاراگراف دوم را محاسبه کنید.
    second_paragraph = first_shape.text_frame.paragraphs[1]
    paragraph_rectangle = second_paragraph.get_rect()

    # مختصات و اندازه تصویر خروجی را محاسبه کنید (حداقل اندازه - 1×1 پیکسل).
    image_left = math.floor(paragraph_rectangle.x)
    image_top = math.floor(paragraph_rectangle.y)
    image_right = image_left + max(1, math.ceil(paragraph_rectangle.width))
    image_bottom = image_top + max(1, math.ceil(paragraph_rectangle.height))

    # bitmap شکل را برش دهید تا تنها bitmap پاراگراف به دست آید.
    paragraph_bitmap = shape_bitmap.crop((image_left, image_top, image_right, image_bottom))

    paragraph_bitmap.save("paragraph.png")

نتیجه:

تصویر پاراگراف

مثال 2

در این مثال، رویکرد قبلی را با افزودن عوامل مقیاس به تصویر پاراگراف گسترش می‌دهیم. شکل از ارائه استخراج می‌شود و با عامل مقیاس 2 به‌عنوان تصویر ذخیره می‌شود. این امکان خروجی با وضوح بالاتر هنگام صادرات پاراگراف را می‌دهد. سپس مرزهای پاراگراف با در نظر گرفتن مقیاس محاسبه می‌شود. مقیاس‌بندی می‌تواند وقتی که به تصویری با جزئیات بیشتر نیاز دارید، مثلاً برای استفاده در مواد چاپی با کیفیت بالا، مفید باشد.

import aspose.slides as slides
import math
import io
from PIL import Image

image_scale_x = 2
image_scale_y = image_scale_x

with slides.Presentation("sample.pptx") as presentation:
    first_shape = presentation.slides[0].shapes[0]

    # شکل را در حافظه به‌صورت bitmap ذخیره کنید.
    with first_shape.get_image(slides.ShapeThumbnailBounds.SHAPE, image_scale_x, image_scale_y) as shape_image:
        shape_image_stream = io.BytesIO()
        shape_image.save(shape_image_stream, slides.ImageFormat.PNG)

    # یک bitmap برای شکل از حافظه ایجاد کنید.
    shape_image_stream.seek(0)
    shape_bitmap = Image.open(shape_image_stream)

    # مرزهای پاراگراف دوم را محاسبه کنید.
    second_paragraph = first_shape.text_frame.paragraphs[1]
    paragraph_rectangle = second_paragraph.get_rect()
    paragraph_rectangle.x *= image_scale_x
    paragraph_rectangle.y *= image_scale_y
    paragraph_rectangle.width *= image_scale_x
    paragraph_rectangle.height *= image_scale_y

    # مختصات و اندازه تصویر خروجی را محاسبه کنید (حداقل اندازه - 1×1 پیکسل).
    image_left = math.floor(paragraph_rectangle.x)
    image_top = math.floor(paragraph_rectangle.y)
    image_right = image_left + max(1, math.ceil(paragraph_rectangle.width))
    image_bottom = image_top + max(1, math.ceil(paragraph_rectangle.height))

    # bitmap شکل را برش دهید تا تنها bitmap پاراگراف به دست آید.
    paragraph_bitmap = shape_bitmap.crop((image_left, image_top, image_right, image_bottom))

    paragraph_bitmap.save("paragraph.png")

سوالات متداول

آیا می‌توانم به‌ طور کامل بسته‌بندی خطوط داخل یک TextFrame را غیرفعال کنم؟

بله. از تنظیم بسته‌بندی فریم متن (wrap_text) استفاده کنید تا بسته‌بندی را غیرفعال کنید؛ بنابراین خطوط در لبه‌های فریم شکسته نخواهند شد.

چگونه می‌توانم مرزهای دقیق یک پاراگراف خاص روی اسلاید را بدست آورم؟

می‌توانید مستطیل محدود‌کننده پاراگراف (و حتی یک بخش تک) را بازیابی کنید تا موقعیت و اندازه دقیق آن را بر روی اسلاید بدانید.

محل کنترل تراز پاراگراف (چپ/راست/وسط/توزیع) کجا است؟

Alignment یک تنظیم سطح پاراگراف در ParagraphFormat است؛ این تنظیم بر کل پاراگراف اعمال می‌شود صرف‌نظر از قالب‌بندی هر بخش جداگانه.

آیا می‌توانم زبان بررسی املاء را فقط برای بخشی از یک پاراگراف (مثلاً یک کلمه) تنظیم کنم؟

بله. زبان در سطح بخش تنظیم می‌شود (PortionFormat.language_id)، بنابراین می‌توانید چندین زبان را در یک پاراگراف داشته باشید.