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

معرفی

Aspose.Slides تمام کلاس‌هایی را که برای کار با متن‌ها، پاراگراف‌ها و بخش‌های PowerPoint نیاز دارید، فراهم می‌کند.

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

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

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

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

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

این کد PHP یک پیاده‌سازی از مراحل افزودن پاراگراف‌های حاوی بخش‌ها است:

# یک شی از کلاس Presentation ایجاد کنید که نمایانگر یک فایل PPTX است
$pres = new Presentation();
try {
    # دسترسی به اسلاید اول
    $slide = $pres->getSlides()->get_Item(0);
    # یک AutoShape از نوع Rectangle اضافه کنید
    $ashp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 150, 300, 150);
    # دسترسی به TextFrame شکل AutoShape
    $tf = $ashp->getTextFrame();
    # ایجاد Paragraph و Portion با قالب‌بندی‌های متنی مختلف
    $para0 = $tf->getParagraphs()->get_Item(0);
    $port01 = new Portion();
    $port02 = new Portion();
    $para0->getPortions()->add($port01);
    $para0->getPortions()->add($port02);
    $para1 = new Paragraph();
    $tf->getParagraphs()->add($para1);
    $port10 = new Portion();
    $port11 = new Portion();
    $port12 = new Portion();
    $para1->getPortions()->add($port10);
    $para1->getPortions()->add($port11);
    $para1->getPortions()->add($port12);
    $para2 = new Paragraph();
    $tf->getParagraphs()->add($para2);
    $port20 = new Portion();
    $port21 = new Portion();
    $port22 = new Portion();
    $para2->getPortions()->add($port20);
    $para2->getPortions()->add($port21);
    $para2->getPortions()->add($port22);
    for($i = 0; $i < 3; $i++) {
        for($j = 0; $j < 3; $j++) {
            $portion = $tf->getParagraphs()->get_Item($i)->getPortions()->get_Item($j);
            $portion->setText("Portion0" . $j);
            if ($j == 0) {
                $portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
                $portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
                $portion->getPortionFormat()->setFontBold(NullableBool::True);
                $portion->getPortionFormat()->setFontHeight(15);
            } else if ($j == 1) {
                $portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
                $portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
                $portion->getPortionFormat()->setFontItalic(NullableBool::True);
                $portion->getPortionFormat()->setFontHeight(18);
            }
        }
    }
    # ذخیره PPTX بر روی دیسک
    $pres->save("multiParaPort_out.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

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

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

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. از طریق ایندکس، به مرجع اسلاید مورد نظر دسترسی پیدا کنید.
  3. یک AutoShape به اسلاید انتخاب‌شده اضافه کنید.
  4. به TextFrame شکل دسترسی پیدا کنید.
  5. پاراگراف پیش‌فرض در TextFrame را حذف کنید.
  6. اولین شیء پاراگراف را با استفاده از کلاس Paragraph ایجاد کنید.
  7. Type گلوله را برای پاراگراف به Symbol تنظیم کنید و کاراکتر گلوله را تعیین کنید.
  8. Text پاراگراف را تنظیم کنید.
  9. Indent پاراگراف برای گلوله را تنظیم کنید.
  10. رنگی برای گلوله تعیین کنید.
  11. ارتفاع گلوله را تنظیم کنید.
  12. پاراگراف جدید را به مجموعه پاراگراف‌های TextFrame اضافه کنید.
  13. پاراگراف دوم را اضافه کنید و فرآیند مراحل 7 تا 13 را تکرار کنید.
  14. ارائه را ذخیره کنید.

این کد PHP نشان می‌دهد چگونه یک گلوله پاراگراف اضافه کنید:

# یک شی از کلاس Presentation که نمایانگر یک فایل PPTX است ایجاد می‌کند
$pres = new Presentation();
try {
    # اسلاید اول را می‌خواند
    $slide = $pres->getSlides()->get_Item(0);
    # یک AutoShape اضافه می‌کند و به آن دسترسی پیدا می‌کند
    $aShp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # فریم متنی autoshape را دسترسی می‌دهد
    $txtFrm = $aShp->getTextFrame();
    # پاراگراف پیش‌فرض را حذف می‌کند
    $txtFrm->getParagraphs()->removeAt(0);
    # یک پاراگراف ایجاد می‌کند
    $para = new Paragraph();
    # سبک و نماد گلوله پاراگراف را تنظیم می‌کند
    $para->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para->getParagraphFormat()->getBullet()->setChar(8226);
    # متن پاراگراف را تنظیم می‌کند
    $para->setText("Welcome to Aspose.Slides");
    # تورفتگی گلوله را تنظیم می‌کند
    $para->getParagraphFormat()->setIndent(25);
    # رنگ گلوله را تنظیم می‌کند
    $para->getParagraphFormat()->getBullet()->getColor()->setColorType(ColorType::RGB);
    $para->getParagraphFormat()->getBullet()->getColor()->setColor(java("java.awt.Color")->BLACK);
    $para->getParagraphFormat()->getBullet()->setBulletHardColor(NullableBool::True);// برای استفاده از رنگ خود گلوله IsBulletHardColor را به true تنظیم می‌کند

    # ارتفاع گلوله را تنظیم می‌کند
    $para->getParagraphFormat()->getBullet()->setHeight(100);
    # پاراگراف را به فریم متنی اضافه می‌کند
    $txtFrm->getParagraphs()->add($para);
    # پاراگراف دوم را ایجاد می‌کند
    $para2 = new Paragraph();
    # نوع و سبک گلوله پاراگراف را تنظیم می‌کند
    $para2->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $para2->getParagraphFormat()->getBullet()->setNumberedBulletStyle(NumberedBulletStyle->BulletCircleNumWDBlackPlain);
    # متن پاراگراف را اضافه می‌کند
    $para2->setText("This is numbered bullet");
    # تورفتگی گلوله را تنظیم می‌کند
    $para2->getParagraphFormat()->setIndent(25);
    $para2->getParagraphFormat()->getBullet()->getColor()->setColorType(ColorType::RGB);
    $para2->getParagraphFormat()->getBullet()->getColor()->setColor(java("java.awt.Color")->BLACK);
    $para2->getParagraphFormat()->getBullet()->setBulletHardColor(NullableBool::True);// برای استفاده از رنگ خود گلوله IsBulletHardColor را به true تنظیم می‌کند

    # ارتفاع گلوله را تنظیم می‌کند
    $para2->getParagraphFormat()->getBullet()->setHeight(100);
    # پاراگراف را به فریم متنی اضافه می‌کند
    $txtFrm->getParagraphs()->add($para2);
    # ارائه اصلاح‌شده را ذخیره می‌کند
    $pres->save("Bullet_out.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

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

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

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. از طریق ایندکس، به مرجع اسلاید مورد نظر دسترسی پیدا کنید.
  3. یک AutoShape به اسلاید اضافه کنید.
  4. به TextFrame شکل دسترسی پیدا کنید.
  5. پاراگراف پیش‌فرض در TextFrame را حذف کنید.
  6. اولین شیء پاراگراف را با استفاده از کلاس Paragraph ایجاد کنید.
  7. تصویر را در PPImage بارگذاری کنید.
  8. نوع گلوله را به Picture تنظیم کنید و تصویر را تعیین کنید.
  9. Text پاراگراف را تنظیم کنید.
  10. Indent پاراگراف برای گلوله را تنظیم کنید.
  11. رنگی برای گلوله تعیین کنید.
  12. ارتفاع گلوله را تنظیم کنید.
  13. پاراگراف جدید را به مجموعه پاراگراف‌های TextFrame اضافه کنید.
  14. پاراگراف دوم را اضافه کنید و فرآیند را بر اساس مراحل قبلی تکرار کنید.
  15. ارائه اصلاح‌شده را ذخیره کنید.

این کد PHP نشان می‌دهد چگونه گلوله‌های تصویری را اضافه و مدیریت کنید:

# یک شی از کلاس Presentation که نمایانگر یک فایل PPTX است ایجاد می‌کند
$presentation = new Presentation();
try {
    # به اسلاید اول دسترسی می‌یابد
    $slide = $presentation->getSlides()->get_Item(0);
    # تصویر مورد استفاده برای گلوله‌ها را ایجاد می‌کند
    $picture;
    $image = Images->fromFile("bullets.png");
    try {
        $picture = $presentation->getImages()->addImage($image);
    } finally {
        if (!java_is_null($image)) {
            $image->dispose();
        }
    }
    # یک AutoShape اضافه می‌کند و به آن دسترسی می‌یابد
    $autoShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # فریم متنی AutoShape را دسترسی می‌دهد
    $textFrame = $autoShape->getTextFrame();
    # پاراگراف پیش‌فرض را حذف می‌کند
    $textFrame->getParagraphs()->removeAt(0);
    # یک پاراگراف جدید ایجاد می‌کند
    $paragraph = new Paragraph();
    $paragraph->setText("Welcome to Aspose.Slides");
    # سبک گلوله پاراگراف و تصویر را تنظیم می‌کند
    $paragraph->getParagraphFormat()->getBullet()->setType(BulletType::Picture);
    $paragraph->getParagraphFormat()->getBullet()->getPicture()->setImage($picture);
    # ارتفاع گلوله را تنظیم می‌کند
    $paragraph->getParagraphFormat()->getBullet()->setHeight(100);
    # پاراگراف را به فریم متنی اضافه می‌کند
    $textFrame->getParagraphs()->add($paragraph);
    # ارائه را به عنوان فایل PPTX ذخیره می‌کند
    $presentation->save("ParagraphPictureBulletsPPTX_out.pptx", SaveFormat::Pptx);
    # ارائه را به عنوان فایل PPT ذخیره می‌کند
    $presentation->save("ParagraphPictureBulletsPPT_out.ppt", SaveFormat::Ppt);
} catch (JavaException $e) {
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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

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

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. از طریق ایندکس، به مرجع اسلاید مورد نظر دسترسی پیدا کنید.
  3. یک AutoShape در اسلاید جدید اضافه کنید.
  4. به TextFrame شکل دسترسی پیدا کنید.
  5. پاراگراف پیش‌فرض در TextFrame را حذف کنید.
  6. اولین پاراگراف را از طریق کلاس Paragraph ایجاد کنید و عمق را به 0 تنظیم کنید.
  7. دومین پاراگراف را از طریق کلاس Paragraph ایجاد کنید و عمق را به 1 تنظیم کنید.
  8. سومین پاراگراف را از طریق کلاس Paragraph ایجاد کنید و عمق را به 2 تنظیم کنید.
  9. چهارمین پاراگراف را از طریق کلاس Paragraph ایجاد کنید و عمق را به 3 تنظیم کنید.
  10. پاراگراف‌های جدید را به مجموعه پاراگراف‌های TextFrame اضافه کنید.
  11. ارائه اصلاح‌شده را ذخیره کنید.

این کد PHP نشان می‌دهد چگونه گلوله‌های چندسطحی را اضافه و مدیریت کنید:

# یک شی از کلاس Presentation که نمایانگر یک فایل PPTX است ایجاد می‌کند
$pres = new Presentation();
try {
    # به اسلاید اول دسترسی می‌یابد
    $slide = $pres->getSlides()->get_Item(0);
    # یک AutoShape اضافه می‌کند و به آن دسترسی می‌یابد
    $aShp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # فریم متنی AutoShape ایجاد شده را دسترسی می‌دهد
    $text = $aShp->addTextFrame("");
    # پاراگراف پیش‌فرض را پاک می‌کند
    $text->getParagraphs()->clear();
    # پاراگراف اول را اضافه می‌کند
    $para1 = new Paragraph();
    $para1->setText("Content");
    $para1->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para1->getParagraphFormat()->getBullet()->setChar(8226);
    $para1->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para1->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # سطح گلوله را تنظیم می‌کند
    $para1->getParagraphFormat()->setDepth(0);
    # پاراگراف دوم را اضافه می‌کند
    $para2 = new Paragraph();
    $para2->setText("Second Level");
    $para2->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para2->getParagraphFormat()->getBullet()->setChar('-');
    $para2->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para2->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # سطح گلوله را تنظیم می‌کند
    $para2->getParagraphFormat()->setDepth(1);
    # پاراگراف سوم را اضافه می‌کند
    $para3 = new Paragraph();
    $para3->setText("Third Level");
    $para3->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para3->getParagraphFormat()->getBullet()->setChar(8226);
    $para3->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para3->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # سطح گلوله را تنظیم می‌کند
    $para3->getParagraphFormat()->setDepth(2);
    # پاراگراف چهارم را اضافه می‌کند
    $para4 = new Paragraph();
    $para4->setText("Fourth Level");
    $para4->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para4->getParagraphFormat()->getBullet()->setChar('-');
    $para4->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para4->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # سطح گلوله را تنظیم می‌کند
    $para4->getParagraphFormat()->setDepth(3);
    # پاراگراف‌ها را به مجموعه اضافه می‌کند
    $text->getParagraphs()->add($para1);
    $text->getParagraphs()->add($para2);
    $text->getParagraphs()->add($para3);
    $text->getParagraphs()->add($para4);
    # ارائه را به عنوان فایل PPTX ذخیره می‌کند
    $pres->save("MultilevelBullet.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

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

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

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. اسلایدی که شامل پاراگراف است را دسترسی پیدا کنید.
  3. یک AutoShape به اسلاید اضافه کنید.
  4. به TextFrame شکل دسترسی پیدا کنید.
  5. پاراگراف پیش‌فرض در TextFrame را حذف کنید.
  6. اولین پاراگراف را از طریق کلاس Paragraph ایجاد کنید و NumberedBulletStartWith را به 2 تنظیم کنید.
  7. دومین پاراگراف را از طریق کلاس Paragraph ایجاد کنید و NumberedBulletStartWith را به 3 تنظیم کنید.
  8. سومین پاراگراف را از طریق کلاس Paragraph ایجاد کنید و NumberedBulletStartWith را به 7 تنظیم کنید.
  9. پاراگراف‌های جدید را به مجموعه پاراگراف‌های TextFrame اضافه کنید.
  10. ارائه اصلاح‌شده را ذخیره کنید.

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

$presentation = new Presentation();
try {
    $shape = $presentation->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # به فریم متنی AutoShape ایجاد شده دسترسی می‌دهد
    $textFrame = $shape->getTextFrame();
    # پاراگراف پیش‌فرض موجود را حذف می‌کند
    $textFrame->getParagraphs()->removeAt(0);
    # فهرست اول
    $paragraph1 = new Paragraph();
    $paragraph1->setText("bullet 2");
    $paragraph1->getParagraphFormat()->setDepth(4);
    $paragraph1->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(2);
    $paragraph1->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $textFrame->getParagraphs()->add($paragraph1);
    $paragraph2 = new Paragraph();
    $paragraph2->setText("bullet 3");
    $paragraph2->getParagraphFormat()->setDepth(4);
    $paragraph2->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(3);
    $paragraph2->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $textFrame->getParagraphs()->add($paragraph2);
    $paragraph5 = new Paragraph();
    $paragraph5->setText("bullet 7");
    $paragraph5->getParagraphFormat()->setDepth(4);
    $paragraph5->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(7);
    $paragraph5->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $textFrame->getParagraphs()->add($paragraph5);
    $presentation->save("SetCustomBulletsNumber-slides.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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

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

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

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

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

این کد نشان می‌دهد چگونه یک تورفتگی پاراگراف تنظیم کنید:

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $rectangleShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle,50,50,420,220);
    $rectangleShape->getFillFormat()->setFillType(FillType::NoFill);
    $rectangleShape->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
    $rectangleShape->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);

    $textFrame = $rectangleShape->addTextFrame("");
    $textFrame->getTextFrameFormat()->setAutofitType(TextAutofitType::Shape);
    $textFrame->getParagraphs()->removeAt(0);

    $firstParagraph = new Paragraph();
    $firstParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $firstParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    $firstParagraph->setText("No first-line indent. Wrapped lines start at the same position as the first line.");
    $firstParagraph->getParagraphFormat()->setMarginLeft(20.0);
    $firstParagraph->getParagraphFormat()->setIndent(0.0);

    $secondParagraph = new Paragraph();
    $secondParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $secondParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    $secondParagraph->setText("First-line indent of 20 points. The first line moves to the right, while wrapped lines remain aligned to the paragraph body.");
    $secondParagraph->getParagraphFormat()->setMarginLeft(20.0);
    $secondParagraph->getParagraphFormat()->setIndent(20.0);

    $thirdParagraph = new Paragraph();
    $thirdParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $thirdParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    $thirdParagraph->setText("First-line indent of 40 points. This paragraph shows a larger first-line offset to make the effect easier to see.");
    $thirdParagraph->getParagraphFormat()->setMarginLeft(20.0);
    $thirdParagraph->getParagraphFormat()->setIndent(40.0);

    $textFrame->getParagraphs()->add($firstParagraph);
    $textFrame->getParagraphs()->add($secondParagraph);
    $textFrame->getParagraphs()->add($thirdParagraph);

    $presentation->save("paragraph_indent.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

نتیجه:

The first-line indent of the paragraphs

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

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

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

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

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. اسلاید هدف را دسترسی پیدا کنید.
  3. یک AutoShape مستطیلی به اسلاید اضافه کنید.
  4. یک TextFrame خالی به شکل اضافه کنید و پاراگراف پیش‌فرض را حذف کنید.
  5. پاراگراف‌ها را ایجاد کنید و برای هر پاراگراف مقدار مثبت MarginLeft تنظیم کنید.
  6. مقدار منفی Indent را تنظیم کنید تا اثر تورفتگی آویزان ایجاد شود.
  7. پاراگراف‌ها را به فریم متنی اضافه کنید.
  8. ارائه اصلاح‌شده را ذخیره کنید.

این کد نشان می‌دهد چگونه تورفتگی آویزان برای یک پاراگراف تنظیم کنید:

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $rectangleShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle,50,50,420,220);
    $rectangleShape->getFillFormat()->setFillType(FillType::NoFill);
    $rectangleShape->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
    $rectangleShape->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);

    $textFrame = $rectangleShape->addTextFrame("");
    $textFrame->getTextFrameFormat()->setAutofitType(TextAutofitType::Shape);
    $textFrame->getParagraphs()->removeAt(0);

    $firstParagraph = new Paragraph();
    $firstParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $firstParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    $firstParagraph->setText("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.");
    $firstParagraph->getParagraphFormat()->setMarginLeft(40.0);
    $firstParagraph->getParagraphFormat()->setIndent(-20.0);

    $secondParagraph = new Paragraph();
    $secondParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $secondParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    $secondParagraph->setText("This second example uses a deeper hanging indent so the difference between the first line and the wrapped lines is easier to compare.");
    $secondParagraph->getParagraphFormat()->setMarginLeft(60.0);
    $secondParagraph->getParagraphFormat()->setIndent(-30.0);

    $textFrame->getParagraphs()->add($firstParagraph);
    $textFrame->getParagraphs()->add($secondParagraph);

    $presentation->save("hanging_indent.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

نتیجه:

The hanging indent of the paragraphs

مدیریت ویژگی‌های اجرا (Run) انتهای پاراگراف

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع اسلاید حاوی پاراگراف را از طریق موقعیت آن دریافت کنید.
  3. یک AutoShape مستطیلی به اسلاید اضافه کنید.
  4. یک TextFrame با دو پاراگراف به مستطیل اضافه کنید.
  5. ارتفاع فونت و نوع فونت را برای پاراگراف‌ها تنظیم کنید.
  6. ویژگی‌های End را برای پاراگراف‌ها تنظیم کنید.
  7. ارائه اصلاح‌شده را به عنوان فایل PPTX بنویسید.

این کد PHP نشان می‌دهد چگونه ویژگی‌های End را برای پاراگراف‌ها در PowerPoint تنظیم کنید:

$pres = new Presentation();
try {
    $shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 200, 250);
    $para1 = new Paragraph();
    $para1->getPortions()->add(new Portion("Sample text"));
    $para2 = new Paragraph();
    $para2->getPortions()->add(new Portion("Sample text 2"));
    $portionFormat = new PortionFormat();
    $portionFormat::setFontHeight(48);
    $portionFormat::setLatinFont(new FontData("Times New Roman"));
    $para2->setEndParagraphPortionFormat($portionFormat);
    $shape->getTextFrame()->getParagraphs()->add($para1);
    $shape->getTextFrame()->getParagraphs()->add($para2);
    $pres->save($resourcesOutputPath . "pres.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

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

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

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. از طریق ایندکس، به مرجع اسلاید مربوطه دسترسی پیدا کنید.
  3. یک AutoShape به اسلاید اضافه کنید.
  4. AutoShape‌تان را به TextFrame دسترسی پیدا کنید.
  5. پاراگراف پیش‌فرض در TextFrame را حذف کنید.
  6. فایل HTML منبع را در یک TextReader بخوانید.
  7. اولین پاراگراف را از طریق کلاس Paragraph ایجاد کنید.
  8. محتوای فایل HTML را که در TextReader خوانده شده است به ParagraphCollection فریم متنی اضافه کنید.
  9. ارائه اصلاح‌شده را ذخیره کنید.

این کد PHP یک پیاده‌سازی از مراحل وارد کردن متن‌های HTML در پاراگراف‌ها است:

# یک شی Presentation خالی ایجاد کنید
$pres = new Presentation();
try {
    # به اسلاید پیش‌فرض اول ارائه دسترسی می‌یابد
    $slide = $pres->getSlides()->get_Item(0);
    # یک AutoShape اضافه می‌کند تا محتوای HTML را دربر بگیرد
    $ashape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, $pres->getSlideSize()->getSize()->getWidth() - 20, $pres->getSlideSize()->getSize()->getHeight() - 10);
    $ashape->getFillFormat()->setFillType(FillType::NoFill);
    # فریم متنی به شکل اضافه می‌کند
    $ashape->addTextFrame("");
    # تمام پاراگراف‌های فریم متنی اضافه شده را پاک می‌کند
    $ashape->getTextFrame()->getParagraphs()->clear();
    # بارگذاری فایل HTML با استفاده از StreamReader
    $tr = new StreamReader("file.html");
    # متن را از StreamReader HTML به فریم متنی اضافه می‌کند
    $ashape->getTextFrame()->getParagraphs()->addFromHtml($tr->readToEnd());
    # ذخیره ارائه
    $pres->save("output_out.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

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

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

  1. یک نمونه از کلاس Presentation ایجاد کنید و ارائه موردنظر را بارگذاری کنید.
  2. از طریق ایندکس، به مرجع اسلاید مربوطه دسترسی پیدا کنید.
  3. به شکل حاوی متنی که قرار است به HTML صادر شود دسترسی پیدا کنید.
  4. به TextFrame شکل دسترسی پیدا کنید.
  5. یک نمونه از StreamWriter ایجاد کنید و فایل HTML جدید را اضافه کنید.
  6. یک ایندکس شروعی به StreamWriter بدهید و پاراگراف‌های دلخواه خود را صادر کنید.

این کد PHP نشان می‌دهد چگونه متن‌های پاراگراف PowerPoint را به HTML صادر کنید:

# فایل ارائه را بارگذاری کنید
$pres = new Presentation("ExportingHTMLText.pptx");
try {
    # به اسلاید پیش‌فرض اول ارائه دسترسی می‌یابد
    $slide = $pres->getSlides()->get_Item(0);
    # ایندکس مورد نظر
    $index = 0;
    # دسترسی به شکل اضافه‌شده
    $ashape = $slide->getShapes()->get_Item($index);
    # ایجاد فایل خروجی HTML
    $os = new Java("java.io.FileOutputStream", "output.html");
    $writer = new OutputStreamWriter($os, "UTF-8");
    # استخراج اولین پاراگراف به صورت HTML
    # نوشتن داده‌های پاراگراف‌ها به HTML با ارائه ایندکس شروع پاراگراف و تعداد کل پاراگراف‌های کپی‌شده
    $writer->write($ashape->getTextFrame()->getParagraphs()->exportToHtml(0, $ashape->getTextFrame()->getParagraphs()->getCount(), null));
    $writer->close();
} catch (JavaException $e) {
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}

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

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

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

The text box with three paragraphs

Example 1

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

$imageIO = new Java("javax.imageio.ImageIO");

$presentation = new Presentation("sample.pptx");
try {
    $firstShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);

    // شکل را در حافظه به عنوان یک بیت‌مپ ذخیره می‌کند.
    $shapeImage = $firstShape->getImage();
    $shapeImageStream = new Java("java.io.ByteArrayOutputStream");
    $shapeImage->save($shapeImageStream, ImageFormat::Png);
    $shapeImage->dispose();

    // یک بیت‌مپ شکل را از حافظه ایجاد می‌کند.
    $shapeImageInputStream = new Java("java.io.ByteArrayInputStream", $shapeImageStream->toByteArray());
    $shapeBitmap = $imageIO->read($shapeImageInputStream);

    // مرزهای پاراگراف دوم را محاسبه می‌کند.
    $secondParagraph = $firstShape->getTextFrame()->getParagraphs()->get_Item(1);
    $paragraphRectangle = $secondParagraph->getRect();

    // مختصات و اندازه تصویر خروجی را محاسبه می‌کند (حداقل اندازه - 1x1 پیکسل).
    $imageX = floor(java_values($paragraphRectangle->getX()));
    $imageY = floor(java_values($paragraphRectangle->getY()));
    $imageWidth = max(1, ceil(java_values($paragraphRectangle->getWidth())));
    $imageHeight = max(1, ceil(java_values($paragraphRectangle->getHeight())));

    // بیت‌مپ شکل را برش می‌دهد تا تنها بیت‌مپ پاراگراف به دست آید.
    $paragraphBitmap = $shapeBitmap->getSubimage($imageX, $imageY, $imageWidth, $imageHeight);

    $imageIO->write($paragraphBitmap, "png", new Java("java.io.File", "paragraph.png"));
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

نتیجه:

The paragraph image

Example 2

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

$imageIO = new Java("javax.imageio.ImageIO");

$imageScaleX = 2;
$imageScaleY = $imageScaleX;

$presentation = new Presentation("sample.pptx");
try {
    $firstShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);

    // شکل را در حافظه به عنوان یک بیت‌مپ با مقیاس ذخیره می‌کند.
    $shapeImage = $firstShape->getImage(ShapeThumbnailBounds::Shape, $imageScaleX, $imageScaleY);
    $shapeImageStream = new Java("java.io.ByteArrayOutputStream");
    $shapeImage->save($shapeImageStream, ImageFormat::Png);
    $shapeImage->dispose();

    // یک بیت‌مپ شکل را از حافظه ایجاد می‌کند.
    $shapeImageInputStream = new Java("java.io.ByteArrayInputStream", $shapeImageStream->toByteArray());
    $shapeBitmap = $imageIO->read($shapeImageInputStream);

    // مرزهای پاراگراف دوم را محاسبه می‌کند.
    $secondParagraph = $firstShape->getTextFrame()->getParagraphs()->get_Item(1);
    $paragraphRectangle = $secondParagraph->getRect();
    $paragraphRectangle->setRect(
            java_values($paragraphRectangle->getX()) * $imageScaleX,
            java_values($paragraphRectangle->getY()) * $imageScaleY,
            java_values($paragraphRectangle->getWidth()) * $imageScaleX,
            java_values($paragraphRectangle->getHeight()) * $imageScaleY
    );

    // مختصات و اندازه تصویر خروجی را محاسبه می‌کند (حداقل اندازه – 1x1 پیکسل).
    $imageX = floor(java_values($paragraphRectangle->getX()));
    $imageY = floor(java_values($paragraphRectangle->getY()));
    $imageWidth = max(1, ceil(java_values($paragraphRectangle->getWidth())));
    $imageHeight = max(1, ceil(java_values($paragraphRectangle->getHeight())));

    // بیت‌مپ شکل را برش می‌دهد تا فقط بیت‌مپ پاراگراف به دست آید.
    $paragraphBitmap = $shapeBitmap->getSubimage($imageX, $imageY, $imageWidth, $imageHeight);

    $imageIO->write($paragraphBitmap, "png", new Java("java.io.File", "paragraph.png"));
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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

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

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

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

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

تنظیمات تراز پاراگراف (چپ/راست/وسط/پراکندگی) در کجا کنترل می‌شود؟

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

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

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