إدارة فقرات نص PowerPoint في PHP
Aspose.Slides توفر جميع الفئات التي تحتاجها للعمل مع نصوص PowerPoint والفقرات والأجزاء.
- توفر Aspose.Slides الفئة TextFrame لتتيح لك إضافة كائنات تمثل فقرة. يمكن لكائن
TextFameأن يحتوي على فقرة واحدة أو عدة فقرات (كل فقرة تُنشأ عبر إرجاع السطر). - توفر Aspose.Slides الفئة Paragraph لتتيح لك إضافة كائنات تمثل أجزاء. يمكن لكائن
Paragraphأن يحتوي على جزء واحد أو عدة أجزاء (مجموعة من كائنات الجزء). - توفر Aspose.Slides الفئة Portion لتتيح لك إضافة كائنات تمثل النصوص وخصائص تنسيقها.
كائن Paragraph قادر على معالجة النصوص ذات الخصائص التنسيقية المختلفة من خلال كائنات Portion التابعة له.
إضافة فقرات متعددة تحتوي على أجزاء متعددة
تظهر هذه الخطوات كيفية إضافة إطار نص يحتوي على 3 فقرات، وكل فقرة تحتوي على 3 أجزاء:
- إنشاء نسخة من الفئة Presentation.
- الوصول إلى مرجع الشريحة المطلوبة من خلال فهرسها.
- إضافة شكل مستطيل AutoShape إلى الشريحة.
- الحصول على ITextFrame المرتبط بـ AutoShape.
- إنشاء كائنين من الفئة Paragraph وإضافتهما إلى مجموعة الفقرات في ITextFrame.
- إنشاء ثلاثة كائنات من الفئة Portion لكل
Paragraphجديد ( جزئين من Portion للفقرة الافتراضية) وإضافة كل كائنPortionإلى مجموعة الأجزاء في كلParagraph. - تعيين نص لكل جزء.
- تطبيق خصائص التنسيق المفضلة لكل جزء باستخدام خصائص التنسيق التي توفرها فئة
Portion. - حفظ العرض التقديمي المعدل.
# إنشاء كائن من فئة Presentation يمثل ملف PPTX
$pres = new Presentation();
try {
# الوصول إلى الشريحة الأولى
$slide = $pres->getSlides()->get_Item(0);
# إضافة AutoShape من نوع مستطيل
$ashp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 150, 300, 150);
# الوصول إلى TextFrame الخاص بالـ AutoShape
$tf = $ashp->getTextFrame();
# إنشاء فقرات وأجزاء بصيغ نصية مختلفة
$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();
}
}
إدارة القوائم المنقطة للفقرات
القوائم المنقطة تساعدك على تنظيم وعرض المعلومات بسرعة وكفاءة. الفقرات المنقطة تكون دائمًا أسهل في القراءة والفهم.
- إنشاء نسخة من الفئة Presentation.
- الوصول إلى مرجع الشريحة المطلوبة من خلال فهرسها.
- إضافة AutoShape إلى الشريحة المختارة.
- الوصول إلى TextFrame الخاص بالشكل.
- إزالة الفقرة الافتراضية في
TextFrame. - إنشاء أول مثال للفقرة باستخدام فئة Paragraph.
- تعيين نوع الرصاصة
Typeللفقرة إلىSymbolوتحديد حرف الرصاصة. - تعيين نص الفقرة
Text. - تعيين إزاحة الفقرة
Indentللرصاصة. - تعيين لون للرصاصة.
- تعيين ارتفاع للرصاصة.
- إضافة الفقرة الجديدة إلى مجموعة فقرات
TextFrame. - إضافة الفقرة الثانية وتكرار العملية المذكورة في الخطوات من 7 إلى 13.
- حفظ العرض التقديمي.
# يُنشئ فئة 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();
}
}
إدارة الرصاصات المصورة
القوائم المنقطة تساعدك على تنظيم وعرض المعلومات بسرعة وكفاءة. الفقرات المصورة تكون سهلة القراءة والفهم.
- إنشاء نسخة من الفئة Presentation.
- الوصول إلى مرجع الشريحة المطلوبة من خلال فهرسها.
- إضافة AutoShape إلى الشريحة.
- الوصول إلى TextFrame الخاص بالشكل.
- إزالة الفقرة الافتراضية في
TextFrame. - إنشاء أول مثال للفقرة باستخدام فئة Paragraph.
- تحميل الصورة في فئة PPImage.
- تعيين نوع الرصاصة إلى Picture وتحديد الصورة.
- تعيين نص الفقرة
Text. - تعيين إزاحة الفقرة
Indentللرصاصة. - تعيين لون للرصاصة.
- تعيين ارتفاع للرصاصة.
- إضافة الفقرة الجديدة إلى مجموعة فقرات
TextFrame. - إضافة الفقرة الثانية وتكرار العملية بناءً على الخطوات السابقة.
- حفظ العرض التقديمي المعدل.
# ينشئ فئة 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();
}
}
إدارة الرصاصات المتعددة المستويات
القوائم المنقطة تساعدك على تنظيم وعرض المعلومات بسرعة وكفاءة. الرصاصات متعددة المستويات تكون سهلة القراءة والفهم.
- إنشاء نسخة من الفئة Presentation.
- الوصول إلى مرجع الشريحة المطلوبة من خلال فهرسها.
- إضافة AutoShape في الشريحة الجديدة.
- الوصول إلى TextFrame الخاص بالشكل.
- إزالة الفقرة الافتراضية في
TextFrame. - إنشاء أول مثال للفقرة عبر فئة Paragraph وتعيين العمق إلى 0.
- إنشاء المثال الثاني للفقرة عبر فئة
Paragraphوتعيين العمق إلى 1. - إنشاء المثال الثالث للفقرة عبر فئة
Paragraphوتعيين العمق إلى 2. - إنشاء المثال الرابع للفقرة عبر فئة
Paragraphوتعيين العمق إلى 3. - إضافة الفقرات الجديدة إلى مجموعة فقرات
TextFrame. - حفظ العرض التقديمي المعدل.
# ينشئ فئة 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 وغيرها لتتمكن من إدارة الفقرات ذات الترقيم أو التنسيق المخصص.
- إنشاء نسخة من الفئة Presentation.
- الوصول إلى الشريحة التي تحتوي على الفقرة.
- إضافة AutoShape إلى الشريحة.
- الوصول إلى TextFrame الخاص بالشكل.
- إزالة الفقرة الافتراضية في
TextFrame. - إنشاء أول مثال للفقرة عبر فئة Paragraph وتعيين NumberedBulletStartWith إلى 2.
- إنشاء المثال الثاني للفقرة عبر فئة
ParagraphوتعيينNumberedBulletStartWithإلى 3. - إنشاء المثال الثالث للفقرة عبر فئة
ParagraphوتعيينNumberedBulletStartWithإلى 7. - إضافة الفقرات الجديدة إلى مجموعة فقرات
TextFrame. - حفظ العرض التقديمي المعدل.
$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();
}
}
تعيين إزاحة للفقرة
- إنشاء نسخة من فئة Presentation.
- الوصول إلى مرجع الشريحة المطلوبة من خلال فهرسها.
- إضافة شكل مستطيل AutoShape إلى الشريحة.
- إضافة TextFrame يحتوي على ثلاث فقرات إلى الشكل المستطيل.
- إخفاء خطوط المستطيل.
- تعيين الإزاحة لكل Paragraph عبر خاصية BulletOffset الخاصة بها.
- كتابة العرض التقديمي المعدل كملف PPT.
# إنشاء فئة Presentation
$pres = new Presentation();
try {
# الحصول على الشريحة الأولى
$sld = $pres->getSlides()->get_Item(0);
# إضافة شكل مستطيل
$rect = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 100, 100, 500, 150);
# إضافة TextFrame إلى المستطيل
$tf = $rect->addTextFrame("This is first line \rThis is second line \rThis is third line");
# ضبط النص ليتناسب مع الشكل
$tf->getTextFrameFormat()->setAutofitType(TextAutofitType::Shape);
# إخفاء خطوط المستطيل
$rect->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
# الحصول على الفقرة الأولى في TextFrame وضبط إزاحتها
$para1 = $tf->getParagraphs()->get_Item(0);
# ضبط نمط رصاصة الفقرة والرمز
$para1->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
$para1->getParagraphFormat()->getBullet()->setChar(8226);
$para1->getParagraphFormat()->setAlignment(TextAlignment->Left);
$para1->getParagraphFormat()->setDepth(2);
$para1->getParagraphFormat()->setIndent(30);
# الحصول على الفقرة الثانية في TextFrame وضبط إزاحتها
$para2 = $tf->getParagraphs()->get_Item(1);
$para2->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
$para2->getParagraphFormat()->getBullet()->setChar(8226);
$para2->getParagraphFormat()->setAlignment(TextAlignment->Left);
$para2->getParagraphFormat()->setDepth(2);
$para2->getParagraphFormat()->setIndent(40);
# الحصول على الفقرة الثالثة في TextFrame وضبط إزاحتها
$para3 = $tf->getParagraphs()->get_Item(2);
$para3->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
$para3->getParagraphFormat()->getBullet()->setChar(8226);
$para3->getParagraphFormat()->setAlignment(TextAlignment->Left);
$para3->getParagraphFormat()->setDepth(2);
$para3->getParagraphFormat()->setIndent(50);
# كتابة العرض التقديمي على القرص
$pres->save("InOutDent_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
تعيين إزاحة معلقة للفقرة
$pres = new Presentation();
try {
$autoShape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 250, 550, 150);
$para1 = new Paragraph();
$para1->setText("Example");
$para2 = new Paragraph();
$para2->setText("Set Hanging Indent for Paragraph");
$para3 = new Paragraph();
$para3->setText("This code shows you how to set the hanging indent for a paragraph: ");
$para2->getParagraphFormat()->setMarginLeft(10.0);
$para3->getParagraphFormat()->setMarginLeft(20.0);
$autoShape->getTextFrame()->getParagraphs()->add($para1);
$autoShape->getTextFrame()->getParagraphs()->add($para2);
$autoShape->getTextFrame()->getParagraphs()->add($para3);
$pres->save("pres.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
إدارة خصائص تشغيل نهاية الفقرة
- إنشاء نسخة من فئة Presentation.
- الحصول على مرجع الشريحة التي تحتوي على الفقرة عبر موضعها.
- إضافة شكل مستطيل AutoShape إلى الشريحة.
- إضافة TextFrame يحتوي على فقرتين إلى المستطيل.
- تعيين ارتفاع الخط ونوع الخط للفقرات.
- تعيين خصائص End للفقرات.
- كتابة العرض التقديمي المعدل كملف PPTX.
$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 إلى الفقرات.
- إنشاء نسخة من فئة Presentation.
- الوصول إلى مرجع الشريحة المطلوبة من خلال فهرسها.
- إضافة AutoShape إلى الشريحة.
- إضافة والوصول إلى TextFrame الخاص بـ
AutoShape. - إزالة الفقرة الافتراضية في
TextFrame. - قراءة ملف HTML المصدر في كائن TextReader.
- إنشاء أول مثال للفقرة عبر فئة Paragraph.
- إضافة محتوى ملف HTML المقروء من TextReader إلى ParagraphCollection الخاص بـ TextFrame.
- حفظ العرض التقديمي المعدل.
# إنشاء مثال فارغ للعرض التقديمي
$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.
- إنشاء نسخة من فئة Presentation وتحميل العرض التقديمي المطلوب.
- الوصول إلى مرجع الشريحة المطلوبة من خلال فهرسها.
- الوصول إلى الشكل الذي يحتوي على النص المراد تصديره إلى HTML.
- الوصول إلى TextFrame الخاص بالشكل.
- إنشاء نسخة من
StreamWriterوإضافة ملف HTML الجديد. - تحديد فهرس بدء للـ StreamWriter وتصدير الفقرات المفضلة لديك.
# تحميل ملف العرض التقديمي
$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، حساب حدود الفقرة داخل الشكل، وتصديرها كصورة bitmap. تتيح هذه الأساليب استخراج أجزاء محددة من النص من عروض PowerPoint وحفظها كصور منفصلة، مما قد يكون مفيدًا لاستخدامات أخرى.
لنفترض أن لدينا ملف عرض تقديمي باسم sample.pptx يحتوي على شريحة واحدة، حيث الشكل الأول هو صندوق نص يحتوي على ثلاث فقرات.

مثال 1
في هذا المثال، نحصل على الفقرة الثانية كصورة. للقيام بذلك، نستخرج صورة الشكل من الشريحة الأولى للعرض التقديمي ثم نحسب حدود الفقرة الثانية في إطار النص داخل الشكل. تُعاد رسم الفقرة على صورة bitmap جديدة، تُحفظ بصيغة 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();
}
}
النتيجة:

مثال 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) لإيقاف التفاف السطر بحيث لا ينكسر عند حواف الإطار.
كيف يمكنني الحصول على حدود الفقرة المحددة على الشريحة بدقة؟
يمكنك استرداد المستطيل المحيط بالفقرة (وحتى الجزء الفردي) لمعرفة موقعه وحجمه الدقيق على الشريحة.
أين يتم التحكم في محاذاة الفقرة (يمين/يسار/وسط/ضبط)؟
Alignment هي إعداد على مستوى الفقرة في ParagraphFormat; يطبق على الفقرة بأكملها بغض النظر عن تنسيق الجزء الفردي.
هل يمكنني تعيين لغة تصحيح إملائي لجزء فقط من الفقرة (مثلاً كلمة واحدة)؟
نعم. تُحدد اللغة على مستوى الجزء (PortionFormat.setLanguageId)، لذا يمكن وجود لغات متعددة داخل فقرة واحدة.