إدارة جداول العروض التقديمية في PHP
المقدمة
تقوم الجداول في PowerPoint بتنظيم المعلومات في صفوف وأعمدة، مما يجعل من السهل قراءتها ومقارنة القيم.
توفر Aspose.Slides الفئة Table والفئة Cell وأنواع أخرى للسماح لك بإنشاء وتحديث وإدارة الجداول في العروض التقديمية.
إنشاء جدول من الصفر
إنشاء جدول عن طريق تحديد موقعه وعرض الأعمدة وارتفاع الصفوف. بعد إضافته إلى شريحة، يمكنك تنسيق حدود الخلايا، دمج الخلايا، وإدراج نص.
- إنشاء كائن من الفئة Presentation .
- الحصول على مرجع إلى الشريحة حسب فهرستها.
- تحديد مصفوفة من عروض الأعمدة بالنقاط.
- تحديد مصفوفة من ارتفاعات الصفوف بالنقاط.
- إضافة كائن Table إلى الشريحة عبر الطريقة addTable .
- تكرر عبر كل Cell لتطبيق تنسيق على الحدود العليا والسفلى واليمين واليسار.
- دمج الخليتين الأوليين في الصف الأول من الجدول.
- الوصول إلى الخلية المدمجة عبر طريقة getTextFrame .
- تعيين النص في الخلية المدمجة.
- حفظ العرض التقديمي المعدل.
المثال أدناه ينشئ جدولًا بثلاثة أعمدة وخمس صفوف عند (100, 50) نقطة. يطبق حدودًا حمراء بعرض 5 نقاط، يدمج الخليتين الأوليين في الصف الأول، ويحفظ النتيجة باسم table.pptx.
use aspose\slides\FillType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$red = java("java.awt.Color")->RED;
$slide = $presentation->getSlides()->get_Item(0);
$columnWidths = [ 50, 50, 50 ];
$rowHeights = [ 50, 30, 30, 30, 30 ];
$table = $slide->getShapes()->addTable(100, 50, $columnWidths, $rowHeights);
for ($rowIndex = 0; $rowIndex < java_values($table->getRows()->size()); $rowIndex++) {
$row = $table->getRows()->get_Item($rowIndex);
for ($columnIndex = 0; $columnIndex < java_values($row->size()); $columnIndex++) {
$cell = $row->get_Item($columnIndex);
$cellFormat = $cell->getCellFormat();
$cellFormat->getBorderTop()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderTop()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderTop()->setWidth(5);
$cellFormat->getBorderBottom()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderBottom()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderBottom()->setWidth(5);
$cellFormat->getBorderLeft()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderLeft()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderLeft()->setWidth(5);
$cellFormat->getBorderRight()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderRight()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderRight()->setWidth(5);
}
}
$table->mergeCells($table->get_Item(0, 0), $table->get_Item(1, 0), false);
$table->get_Item(0, 0)->getTextFrame()->setText("Merged Cells");
$presentation->save("table.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
الترقيم في جدول قياسي
في جدول قياسي، مؤشرات الخلايا تبدأ من الصفر وتستخدم الترتيب (عمود، صف). الخلية الأولى لها الفهرس (0, 0).
على سبيل المثال، تُرقم الخلايا في جدول يضم 4 أعمدة و4 صفوف بهذه الطريقة:
| (0, 0) | (1, 0) | (2, 0) | (3, 0) |
|---|---|---|---|
| (0, 1) | (1, 1) | (2, 1) | (3, 1) |
| (0, 2) | (1, 2) | (2, 2) | (3, 2) |
| (0, 3) | (1, 3) | (2, 3) | (3, 3) |
هذا المثال ينشئ جدول 4 × 4 الموضح أعلاه، بعروض الأعمدة وارتفاعات الصفوف 70 نقطة، وحدود خلايا حمراء بعرض 5 نقاط. تُظهر الإحداثيات مؤشرات الخلايا؛ يترك المثال الخلايا فارغة ويحفظ الجدول باسم StandardTables_out.pptx.
use aspose\slides\FillType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$red = java("java.awt.Color")->RED;
$slide = $presentation->getSlides()->get_Item(0);
$columnWidths = [ 70, 70, 70, 70 ];
$rowHeights = [ 70, 70, 70, 70 ];
$table = $slide->getShapes()->addTable(100, 50, $columnWidths, $rowHeights);
for ($rowIndex = 0; $rowIndex < java_values($table->getRows()->size()); $rowIndex++) {
$row = $table->getRows()->get_Item($rowIndex);
for ($columnIndex = 0; $columnIndex < java_values($row->size()); $columnIndex++) {
$cell = $row->get_Item($columnIndex);
$cellFormat = $cell->getCellFormat();
$cellFormat->getBorderTop()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderTop()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderTop()->setWidth(5);
$cellFormat->getBorderBottom()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderBottom()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderBottom()->setWidth(5);
$cellFormat->getBorderLeft()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderLeft()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderLeft()->setWidth(5);
$cellFormat->getBorderRight()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat->getBorderRight()->getFillFormat()->getSolidFillColor()->setColor($red);
$cellFormat->getBorderRight()->setWidth(5);
}
}
$presentation->save("StandardTables_out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
الوصول إلى جدول موجود
يتم تخزين الجداول في مجموعة الأشكال الخاصة بالشريحة. تكرار عبر الأشكال لتحديد موقع جدول، ثم استخدم الفئة Table لقراءة أو تحديث خلاياه.
- تحميل العرض التقديمي باستخدام الفئة Presentation .
- الحصول على مرجع إلى الشريحة التي تحتوي على الجدول حسب فهرستها.
- تكرار عبر كائنات Shape والتوقف عند العثور على جدول. إذا كانت الشريحة تحتوي على عدة جداول، استخدم getAlternativeText لتحديد الجدول المطلوب.
- تحديث النص في الخلية المستهدفة.
- حفظ العرض التقديمي المعدل.
المثال أدناه يفتح UpdateExistingTable.pptx ويجد أول جدول في الشريحة الأولى. يعيّن الخلية في العمود 0، الصف 1 إلى New ويحفظ النتيجة باسم table1_out.pptx. يجب أن يحتوي الإدخال على شريحة واحدة على الأقل، ويجب أن يحتوي أول جدول في تلك الشريحة على عمود واحد على الأقل وصفين على الأقل.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("UpdateExistingTable.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$table = null;
$tableClass = new JavaClass("com.aspose.slides.Table");
$shapeCount = java_values($slide->getShapes()->size());
for ($shapeIndex = 0; $shapeIndex < $shapeCount; $shapeIndex++) {
$shape = $slide->getShapes()->get_Item($shapeIndex);
if (java_instanceof($shape, $tableClass)) {
$table = $shape;
break;
}
}
if ($table !== null) {
$table->get_Item(0, 1)->getTextFrame()->setText("New");
$presentation->save("table1_out.pptx", SaveFormat::Pptx);
}
} finally {
$presentation->dispose();
}
لتحجيم صف في جدول موجود وفهم لماذا قد يتجاوز ارتفاعه الفعلي الحد الأدنى المطلوب، راجع التحكم في ارتفاع الصف.
العثور على الخلية التي تمتلك إطار نص
عند تلقي كود معالجة نص عام كائن TextFrame من جدول، استخدم طريقة TextFrame::getParentCell لاسترجاع Cell المالكة. بالنسبة لإطار نص خلية جدول، تُعيد TextFrame::getParentCell المالك وتُعيد TextFrame::getParentShape null، رغم أن الجدول نفسه شكل.
إحداثيات الخلية متاحة عبر الطريقة القراءة‑فقط Cell::getFirstColumnIndex والطريقة Cell::getFirstRowIndex . توفر TextFrame::getParentCell أيضًا تنقلًا للقراءة‑فقط: تُعيد المالك دون تغيير الملكية. تأكد دائمًا من فحص الخلية المرجعية باستخدام java_is_null قبل استخدامها.
للحصول على مثال كامل يحدد مالكي خلايا الجدول والأشكال، بما في ذلك الأشكال المرتبطة بعقد SmartArt، راجع بحث واستبدال النص.
محاذاة النص في جدول
يمكنك التحكم في تثبيت العمودي واتجاه النص لخلايا الجدول الفردية. المثال في هذا القسم يوسط النص داخل الخلية الأولى ويديره بزاوية 270 درجة.
- إنشاء كائن من الفئة Presentation .
- الحصول على مرجع إلى الشريحة حسب فهرستها.
- إضافة كائن Table إلى الشريحة.
- الوصول إلى كائن TextFrame من الجدول.
- الوصول إلى أول Paragraph وتعيين نصه ولونه.
- تعيين تثبيت العمودي للخلية واتجاه النص باستخدام setTextAnchorType وsetTextVerticalType .
- حفظ العرض التقديمي المعدل.
هذا المثال ينشئ جدولًا 4 × 4 بعروض أعمدة 120 نقطة وارتفاع صفوف 100 نقطة. ينسق النص في الخلية (0, 0)، يضيف قيمًا إلى الخلايا المتبقية في الصف الأول، ويحفظ النتيجة باسم Vertical_Align_Text_out.pptx.
use aspose\slides\FillType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TextAnchorType;
use aspose\slides\TextVerticalType;
$presentation = new Presentation();
try {
$black = java("java.awt.Color")->BLACK;
$slide = $presentation->getSlides()->get_Item(0);
$columnWidths = [ 120, 120, 120, 120 ];
$rowHeights = [ 100, 100, 100, 100 ];
$table = $slide->getShapes()->addTable(100, 50, $columnWidths, $rowHeights);
$table->get_Item(1, 0)->getTextFrame()->setText("10");
$table->get_Item(2, 0)->getTextFrame()->setText("20");
$table->get_Item(3, 0)->getTextFrame()->setText("30");
$textFrame = $table->get_Item(0, 0)->getTextFrame();
$paragraph = $textFrame->getParagraphs()->get_Item(0);
$portion = $paragraph->getPortions()->get_Item(0);
$portion->setText("Text here");
$portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor($black);
$cell = $table->get_Item(0, 0);
$cell->setTextAnchorType(TextAnchorType::Center);
$cell->setTextVerticalType(TextVerticalType::Vertical270);
$presentation->save("Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
تعيين تنسيق النص على مستوى الجدول
استخدم setTextFormat لتطبيق تنسيق النص على جميع خلايا الجدول. تدعمه الإصدارات المتعددة لتنسيق الجزء والفقرة وإطار النص، بحيث يمكنك تعيين هذه الخصائص دون الحاجة للتكرار عبر كل خلية.
- تحميل العرض التقديمي باستخدام الفئة Presentation .
- الحصول على مرجع إلى الشريحة حسب فهرستها.
- الوصول إلى كائن Table من الشريحة.
- تعيين حجم الخط باستخدام setFontHeight للنص.
- تعيين محاذاة الفقرة والهامش الأيمن باستخدام setAlignment وsetMarginRight .
- تعيين اتجاه النص باستخدام setTextVerticalType .
- حفظ العرض التقديمي المعدل.
المثال أدناه يفتح table.pptx، والذي يجب أن يحتوي على شريحة واحدة على الأقل مع جدول كأول شكل. يعيّن حجم الخط إلى 25 نقطة، يضبط محاذاة الفقرات إلى اليمين مع هامش أيمن 20 نقطة، ويجعل النص عموديًا. يتم حفظ العرض المنسق باسم result.pptx.
use aspose\slides\ParagraphFormat;
use aspose\slides\PortionFormat;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TextAlignment;
use aspose\slides\TextFrameFormat;
use aspose\slides\TextVerticalType;
$presentation = new Presentation("table.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$table = $slide->getShapes()->get_Item(0);
$portionFormat = new PortionFormat();
$portionFormat->setFontHeight(25);
$table->setTextFormat($portionFormat);
$paragraphFormat = new ParagraphFormat();
$paragraphFormat->setAlignment(TextAlignment::Right);
$paragraphFormat->setMarginRight(20);
$table->setTextFormat($paragraphFormat);
$textFrameFormat = new TextFrameFormat();
$textFrameFormat->setTextVerticalType(TextVerticalType::Vertical);
$table->setTextFormat($textFrameFormat);
$presentation->save("result.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
الحصول على خصائص نمط الجدول
استخدم getStylePreset لقراءة النمط المسبق للجدول وsetStylePreset لتعيينه. يطبق هذا المثال TableStylePreset::DarkStyle1 على جدول واحد، يطبع قيمة النمط المسبق، ويعين نفس النمط لجدول ثاني. يتم حفظ كلا الجدولين في table-style.pptx.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\TableStylePreset;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$columnWidths = [ 100, 150 ];
$rowHeights = [ 5, 5, 5 ];
$table = $slide->getShapes()->addTable(10, 10, $columnWidths, $rowHeights);
$table->setStylePreset(TableStylePreset::DarkStyle1);
$stylePreset = java_values($table->getStylePreset());
echo "Table style preset: " . $stylePreset . PHP_EOL;
$anotherTable = $slide->getShapes()->addTable(10, 100, $columnWidths, $rowHeights);
$anotherTable->setStylePreset($stylePreset);
$presentation->save("table-style.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
قفل نسبة الأبعاد لجدول
نسبة أبعاد الجدول هي نسبة عرضه إلى ارتفاعه. استخدم setAspectRatioLocked لقفل هذه النسبة للجدول.
المثال أدناه يفتح pres.pptx، والذي يجب أن يحتوي على شريحة واحدة على الأقل مع جدول كأول شكل. يطبع حالة القفل الحالية، يفعّل قفل نسبة الأبعاد، يطبع الحالة المحدثة (true)، ويحفظ النتيجة باسم pres-out.pptx.
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("pres.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$table = $slide->getShapes()->get_Item(0);
echo "Lock aspect ratio set: " . (java_values($table->getGraphicalObjectLock()->getAspectRatioLocked()) ? "true" : "false") . PHP_EOL;
$table->getGraphicalObjectLock()->setAspectRatioLocked(true);
echo "Lock aspect ratio set: " . (java_values($table->getGraphicalObjectLock()->getAspectRatioLocked()) ? "true" : "false") . PHP_EOL;
$presentation->save("pres-out.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
الأسئلة المتكررة
هل يمكنني تمكين اتجاه القراءة من اليمين إلى اليسار (RTL) لجدول كامل والنص داخل خلاياه؟
نعم. تعرض الجدول طريقة setRightToLeft ، وتتوفر الفقرات على طريقة ParagraphFormat::setRightToLeft. باستخدام الطريقتين يضمن ترتيب RTL الصحيح وعرضه داخل الخلايا.
كيف يمكنني منع المستخدمين من تحريك أو تغيير حجم جدول في الملف النهائي؟
استخدم shape locks لتعطيل التحريك، تغيير الحجم، التحديد، وما إلى ذلك. تنطبق هذه الأقفال على الجداول أيضًا.
هل يدعم إدراج صورة داخل خلية كخلفية؟
نعم. يمكنك تعيين picture fill للخلية؛ ستغطي الصورة مساحة الخلية وفقًا للوضع المختار (تمدد أو تجانب).