Διαχείριση Πινάκων Παρουσίασης σε PHP
Εισαγωγή
Ένας πίνακας στο PowerPoint είναι ένας αποδοτικός τρόπος παρουσίασης και απεικόνισης πληροφοριών. Οι πληροφορίες σε ένα πλέγμα κελιών (διατεταγμένα σε σειρές και στήλες) είναι απλές και εύκολες στην κατανόηση.
Η Aspose.Slides παρέχει την κλάση Table , την κλάση Cell , και άλλους τύπους που σας επιτρέπουν να δημιουργείτε, ενημερώνετε και διαχειρίζεστε πίνακες σε όλα τα είδη παρουσιάσεων.
Δημιουργία Πίνακα από την Αρχή
- Δημιουργήστε ένα στιγμιότυπο της κλάσης Presentation.
- Αποκτήστε αναφορά σε μια διαφάνεια μέσω του δείκτη της.
- Ορίστε έναν πίνακα του
columnWidth. - Ορίστε έναν πίνακα του
rowHeight. - Προσθέστε ένα αντικείμενο Table στη διαφάνεια μέσω της μεθόδου addTable.
- Επαναλάβετε για κάθε Cell ώστε να εφαρμόσετε μορφοποίηση στα άνω, κάτω, δεξιά και αριστερά όρια.
- Συνενώστε τα πρώτα δύο κελιά της πρώτης σειράς του πίνακα.
- Προσεγγίστε το TextFrame ενός Cell.
- Προσθέστε κάποιο κείμενο στο TextFrame.
- Αποθηκεύστε την τροποποιημένη παρουσίαση.
# Δημιουργεί μια κλάση Presentation που αντιπροσωπεύει ένα αρχείο PPTX
$pres = new Presentation();
try {
# Προσπελάζει την πρώτη διαφάνεια
$sld = $pres->getSlides()->get_Item(0);
# Ορίζει στήλες με πλάτη και σειρές με ύψη
$dblCols = array(50, 50, 50 );
$dblRows = array(50, 30, 30, 30, 30 );
# Προσθέτει ένα σχήμα πίνακα στη διαφάνεια
$tbl = $sld->getShapes()->addTable(100, 50, $dblCols, $dblRows);
# Ορίζει τη μορφοποίηση του περιγράμματος για κάθε κελί
for($row = 0; $row < java_values($tbl->getRows()->size()) ; $row++) {
for($cell = 0; $cell < java_values($tbl->getRows()->get_Item($row)->size()) ; $cell++) {
$cellFormat = $tbl->getRows()->get_Item($row)->get_Item($cell)->getCellFormat();
$cellFormat::getBorderTop()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderTop()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderTop()->setWidth(5);
$cellFormat::getBorderBottom()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderBottom()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderBottom()->setWidth(5);
$cellFormat::getBorderLeft()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderLeft()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderLeft()->setWidth(5);
$cellFormat::getBorderRight()->getFillFormat()->setFillType(FillType::Solid);
$cellFormat::getBorderRight()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cellFormat::getBorderRight()->setWidth(5);
}
}
# Συγχωνεύει τα κελιά 1 & 2 της σειράς 1
$tbl->mergeCells($tbl->getRows()->get_Item(0)->get_Item(0), $tbl->getRows()->get_Item(1)->get_Item(1), false);
# Προσθέτει κάποιο κείμενο στο συγχωνευμένο κελί
$tbl->getRows()->get_Item(0)->get_Item(0)->getTextFrame()->setText("Merged Cells");
# Αποθηκεύει την παρουσίαση στο δίσκο
$pres->save("table.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Αρίθμηση σε Κανονικό Πίνακα
Σε έναν κανονικό πίνακα, η αρίθμηση των κελιών είναι απλή και αρχίζει από το μηδέν. Το πρώτο κελί σε έναν πίνακα έχει δείκτη 0,0 (στήλη 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) |
Αυτός ο κώδικας PHP δείχνει πώς να ορίσετε την αρίθμηση των κελιών σε έναν πίνακα:
# Δημιουργεί μια κλάση Presentation που αντιπροσωπεύει ένα αρχείο PPTX
$pres = new Presentation();
try {
# Προσπελάζει την πρώτη διαφάνεια
$sld = $pres->getSlides()->get_Item(0);
# Ορίζει στήλες με πλάτη και σειρές με ύψη
$dblCols = array(70, 70, 70, 70 );
$dblRows = array(70, 70, 70, 70 );
# Προσθέτει ένα σχήμα πίνακα στη διαφάνεια
$tbl = $sld->getShapes()->addTable(100, 50, $dblCols, $dblRows);
# Ορίζει τη μορφοποίηση του περιγράμματος για κάθε κελί
$rows = $tbl->getRows();
foreach($rows as $row) {
foreach($row as $cell) {
$cell->getCellFormat()->getBorderTop()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderTop()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderTop()->setWidth(5);
$cell->getCellFormat()->getBorderBottom()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderBottom()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderBottom()->setWidth(5);
$cell->getCellFormat()->getBorderLeft()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderLeft()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderLeft()->setWidth(5);
$cell->getCellFormat()->getBorderRight()->getFillFormat()->setFillType(FillType::Solid);
$cell->getCellFormat()->getBorderRight()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
$cell->getCellFormat()->getBorderRight()->setWidth(5);
}
}
# Αποθηκεύει την παρουσίαση στο δίσκο
$pres->save("StandardTables_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Πρόσβαση σε Υπάρχον Πίνακα
-
Δημιουργήστε ένα στιγμιότυπο της κλάσης Presentation.
-
Αποκτήστε μια αναφορά στη διαφάνεια που περιέχει τον πίνακα μέσω του δείκτη της.
-
Δημιουργήστε ένα αντικείμενο Table και ορίστε το σε null.
-
Επαναλάβετε σε όλα τα αντικείμενα Shape μέχρι να βρεθεί ο πίνακας.
Εάν υποψιάζεστε ότι η διαφάνεια που επεξεργάζεστε περιέχει έναν μόνο πίνακα, μπορείτε απλά να ελέγξετε όλα τα σχήματα που περιέχει. Όταν ένα σχήμα αναγνωρίζεται ως πίνακας, μπορείτε να το μετατρέψετε σε αντικείμενο [Table]. Ωστόσο, εάν η διαφάνεια περιέχει πολλούς πίνακες, είναι προτιμότερο να αναζητήσετε τον απαιτούμενο πίνακα μέσω του setAlternativeText(String value).
-
Χρησιμοποιήστε το αντικείμενο Table για να εργαστείτε με τον πίνακα. Στο παρακάτω παράδειγμα, προσθέσαμε μια νέα σειρά στον πίνακα.
-
Αποθηκεύστε την τροποποιημένη παρουσίαση.
# Δημιουργεί την κλάση Presentation που αντιπροσωπεύει ένα αρχείο PPTX
$pres = new Presentation("UpdateExistingTable.pptx");
try {
# Προσπελάζει την πρώτη διαφάνεια
$sld = $pres->getSlides()->get_Item(0);
# Αρχικοποιεί το TableEx σε null
$tbl = null;
# Επαναλαμβάνει τα σχήματα και ορίζει μια αναφορά στον πίνακα που βρέθηκε
$shapes = $sld->getShapes();
foreach($shapes as $shp) {
if (java_instanceof($shp, new JavaClass("com.aspose.slides.Table"))) {
$tbl = $shp;
# Ορίζει το κείμενο για την πρώτη στήλη της δεύτερης σειράς
$tbl->get_Item(0, 1)->getTextFrame()->setText("New");
}
}
# Αποθηκεύει την τροποποιημένη παρουσίαση στο δίσκο
$pres->save("table1_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Εντοπισμός του Κελιού που Κατέχει ένα Πλαίσιο Κειμένου
Όταν ο γενικός κώδικας επεξεργασίας κειμένου λαμβάνει ένα TextFrame από έναν πίνακα, χρησιμοποιήστε τη μέθοδο TextFrame::getParentCell για να ανακτήσετε το ιδιοκατοίκι Cell. Για ένα πλαίσιο κειμένου κελιού πίνακα, το TextFrame::getParentCell επιστρέφει τον κάτοχο και το TextFrame::getParentShape επιστρέφει null, ακόμη και αν ο πίνακας αυτός είναι σχήμα.
Οι συντεταγμένες του κελιού είναι διαθέσιμες μέσω των μόνο‑ανάγνωση μεθόδων Cell::getFirstColumnIndex και Cell::getFirstRowIndex. Το TextFrame::getParentCell παρέχει επίσης πλοήγηση μόνο‑ανάγνωση: επιστρέφει τον κάτοχο αλλά δεν αλλάζει την ιδιοκτησία. Πάντα ελέγχετε το επιστρεφόμενο κελί με java_is_null πριν το χρησιμοποιήσετε.
Για ένα πλήρες παράδειγμα που εντοπίζει ιδιοκτήτες κελιών πίνακα και σχημάτων, συμπεριλαμβανομένων σχημάτων που σχετίζονται με κόμβους SmartArt, δείτε το Search and Replace Text.
Στοίχιση Κειμένου σε Πίνακα
- Δημιουργήστε ένα στιγμιότυπο της κλάσης Presentation.
- Αποκτήστε αναφορά σε μια διαφάνεια μέσω του δείκτη της.
- Προσθέστε ένα αντικείμενο Table στη διαφάνεια.
- Προσεγγίστε ένα αντικείμενο TextFrame από τον πίνακα.
- Προσεγγίστε το Paragraph.
- Στοίχιση του κειμένου κατακόρυφα.
- Αποθηκεύστε την τροποποιημένη παρουσίαση.
# Δημιουργεί ένα αντικείμενο της κλάσης Presentation
$pres = new Presentation();
try {
# Λαμβάνει την πρώτη διαφάνεια
$slide = $pres->getSlides()->get_Item(0);
# Ορίζει στήλες με πλάτη και σειρές με ύψη
$dblCols = array(120, 120, 120, 120 );
$dblRows = array(100, 100, 100, 100 );
# Προσθέτει το σχήμα πίνακα στη διαφάνεια
$tbl = $slide->getShapes()->addTable(100, 50, $dblCols, $dblRows);
$tbl->get_Item(1, 0)->getTextFrame()->setText("10");
$tbl->get_Item(2, 0)->getTextFrame()->setText("20");
$tbl->get_Item(3, 0)->getTextFrame()->setText("30");
# Προσπελάζει το πλαίσιο κειμένου
$txtFrame = $tbl->get_Item(0, 0)->getTextFrame();
# Δημιουργεί το αντικείμενο Paragraph για το πλαίσιο κειμένου
$paragraph = $txtFrame->getParagraphs()->get_Item(0);
# Δημιουργεί το αντικείμενο Portion για την παράγραφο
$portion = $paragraph->getPortions()->get_Item(0);
$portion->setText("Text here");
$portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
$portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
# Στοίχει το κείμενο κατακόρυφα
$cell = $tbl->get_Item(0, 0);
$cell->setTextAnchorType(TextAnchorType::Center);
$cell->setTextVerticalType(TextVerticalType::Vertical270);
# Αποθηκεύει την παρουσίαση στο δίσκο
$pres->save("Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Ορισμός Μορφοποίησης Κειμένου σε Επίπεδο Πίνακα
- Δημιουργήστε ένα στιγμιότυπο της κλάσης Presentation.
- Αποκτήστε αναφορά σε μια διαφάνεια μέσω του δείκτη της.
- Προσεγγίστε ένα αντικείμενο Table από τη Διαφάνεια.
- Ορίστε το setFontHeight(float value) για το κείμενο.
- Ορίστε το setAlignment(int value) και το setMarginRight(float value).
- Ορίστε το setTextVerticalType(byte value).
- Αποθηκεύστε την τροποποιημένη παρουσίαση.
# Δημιουργεί ένα αντικείμενο της κλάσης Presentation
$pres = new Presentation("simpletable.pptx");
try {
# Υποθέτουμε ότι το πρώτο σχήμα στην πρώτη διαφάνεια είναι πίνακας
$someTable = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
# Ορίζει το ύψος γραμματοσειράς των κελιών του πίνακα
$portionFormat = new PortionFormat();
$portionFormat::setFontHeight(25);
$someTable->setTextFormat($portionFormat);
# Ορίζει την στοίχιση κειμένου και το δεξιό περιθώριο των κελιών του πίνακα με μία κλήση
$paragraphFormat = new ParagraphFormat();
$paragraphFormat::setAlignment(TextAlignment->Right);
$paragraphFormat::setMarginRight(20);
$someTable->setTextFormat($paragraphFormat);
# Ορίζει τον κατακόρυφο τύπο κειμένου των κελιών του πίνακα
$textFrameFormat = new TextFrameFormat();
$textFrameFormat::setTextVerticalType(TextVerticalType::Vertical);
$someTable->setTextFormat($textFrameFormat);
$pres->save("result.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Ανάκτηση Ιδιοτήτων Στυλ Πίνακα
Η Aspose.Slides σας επιτρέπει να ανακτήσετε τις ιδιότητες στυλ ενός πίνακα ώστε να μπορείτε να χρησιμοποιήσετε αυτές τις λεπτομέρειες για άλλο πίνακα ή αλλού. Αυτός ο κώδικας PHP δείχνει πώς να λάβετε τις ιδιότητες στυλ από ένα προρυθμισμένο στυλ πίνακα:
$pres = new Presentation();
try {
$table = $pres->getSlides()->get_Item(0)->getShapes()->addTable(10, 10, array(100, 150 ), array(5, 5, 5 ));
$table->setStylePreset(TableStylePreset->DarkStyle1);// αλλάζει το προεπιλεγμένο στυλ προεπιλογής θέματος
$pres->save("table.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Κλείδωμα Λόγου Αναλογίας Πίνακα
Ο λόγος αναλογίας ενός γεωμετρικού σχήματος είναι το ποσοστό των διαστάσεων του σε διαφορετικές διαστάσεις. Η Aspose.Slides παρέχει τη μέθοδο setAspectRatioLocked για να μπορείτε να κλειδώσετε τη ρύθμιση λόγου αναλογίας για πίνακες και άλλα σχήματα.
$pres = new Presentation("pres.pptx");
try {
$table = $pres->getSlides()->get_Item(0)->getShapes()->get_Item(0);
echo("Lock aspect ratio set: " . $table->getGraphicalObjectLock()->getAspectRatioLocked());
$table->getGraphicalObjectLock()->setAspectRatioLocked(!$table->getGraphicalObjectLock()->getAspectRatioLocked());// αντιστρέφει
echo("Lock aspect ratio set: " . $table->getGraphicalObjectLock()->getAspectRatioLocked());
$pres->save("pres-out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Συχνές Ερωτήσεις
Μπορώ να ενεργοποιήσω κατεύθυνση ανάγνωσης δεξιά‑προς‑αριστερά (RTL) για ολόκληρο τον πίνακα και το κείμενο στα κελιά του;
Ναι. Ο πίνακας εκθέτει τη μέθοδο setRightToLeft, και οι παράγραφοι έχουν τη μέθοδο ParagraphFormat::setRightToLeft. Η χρήση και των δύο εξασφαλίζει τη σωστή σειρά RTL και την αποτύπωση μέσα στα κελιά.
Πώς μπορώ να αποτρέψω τους χρήστες από το να μετακινούν ή να αλλάζουν το μέγεθος ενός πίνακα στο τελικό αρχείο;
Χρησιμοποιήστε κλειδώματα σχήματος για να απενεργοποιήσετε τη μετακίνηση, την αλλαγή μεγέθους, την επιλογή κ.λπ. Αυτά τα κλειδώματα ισχύουν και για πίνακες.
Υποστηρίζεται η εισαγωγή εικόνας μέσα σε ένα κελί ως φόντο;
Ναι. Μπορείτε να ορίσετε μια picture fill για ένα κελί· η εικόνα θα καλύψει την περιοχή του κελιού ανάλογα με την επιλεγμένη λειτουργία (τεντωμένο ή πλακίδιο).