Automatisierte Dokumentenerstellung mit PHPWord und PHPPowerPoint – Teil 4
Kommentare

Showtime for PHPPowerPoint
Nach den Primanern kommt nun ein I-Männchen zum Einsatz: PHPPowerPoint ist vom Entwicklungsstand her gerade eingeschult worden.

Immer noch ist die Version 0.1.0 das einzige Release, obwohl das Projekt bereits im April 2009 gestartet wurde. Das bedeutet aber wiederum nicht, dass nur rudimentäre Funktionen bereitstehen: PHPPowerPoint erstellt PowerPoint-2007-Dokumente inklusive Office-Metadaten wie Autor, Titel und Beschreibung, umfasst diverse Schriften und Schriftformatierungen, erlaubt die Gestaltung der Druckausgabe sowie das Einfügen von Bildern mit Positionsangaben, Drehung und Schatten. Auf eine umfassende Dokumentation wie bei den Schwesterklassen kann man nicht zurückgreifen, hier können nur die mitgelieferten vier Beispiele aus dem Unterverzeichnis Tests als Vorlage für eigene Projekte dienen.

Nachfolgend zeigen wir, wie man mit den aktuell zur Verfügung stehenden Funktionen des Programms eine Präsentation mit Text und Bildern erstellen kann. Schon kurz nach dem Start des Programms bemerkt man an den Feinheiten das junge Alter der Klasse. Hier müssen z. B. die benötigten Dateien ‚PHPPowerPoint.php‘ und ‚PHPPowerPoint/IOFactory.php‘ noch einzeln als Include angegeben werden, kein Lazy Loading an dieser Stelle. Es folgt die lokale Funktion createTemplatedSlide(PHPPowerPoint $objPHPPowerPoint) , die später im Programm genutzt wird. Mit jedem Aufruf wird eine neue Folie (Slide) erstellt und ein Hintergrundbild sowie zwei Logos eingesetzt. Listing 7 zeigt den strukturierten Aufbau.
Listing 7
function createTemplatedSlide(PHPPowerPoint $objPHPPowerPoint) {
// Create slide
$slide = $objPHPPowerPoint->createSlide();

// Add background image
$shape = $slide->createDrawingShape();
$shape->setName('Background');
$shape->setDescription('Background');
$shape->setPath('./images/realdolmen_bg.jpg');
$shape->setWidth(950);
$shape->setHeight(720);
$shape->setOffsetX(0);
$shape->setOffsetY(0);

// Add logo PHPPowerPoint
$shape = $slide->createDrawingShape();
$shape->setName('PHPPowerPoint logo');
$shape->setDescription('PHPPowerPoint logo');
$shape->setPath('./images/phppowerpoint_logo.gif');
$shape->setHeight(40);
$shape->setOffsetX(10);
$shape->setOffsetY(720 - 10 - 40);
  
  // Add logo php Magazin
$shape = $slide->createDrawingShape();
$shape->setName('PHPPowerPoint logo');
$shape->setDescription('PHPPowerPoint logo');
$shape->setPath('./images/phppowerpoint_logo.gif');
$shape->setHeight(40);
$shape->setOffsetX(950 - 300);
$shape->setOffsetY(720 - 10 - 40);

// Return slide
return $slide;
}
Analog zu den anderen beiden Klassen für Excel und Word wird auch in diesem Programm mit $objPHPPowerPoint = new PHPPowerPoint()ein neues Objekt instanziiert. Es folgt das bekannte Füllen der Metadaten mit Angaben zum Autoren, einer Beschreibung und weiteren Daten, das bei allen drei Klassen identisch verläuft. Das Erzeugen des Objekts erstellt automatisch eine leere Folie, die mit $objPHPPowerPoint->removeSlideByIndex(0) wieder entfernt werden muss. Dies ist notwendig, da mit $currentSlide = createTemplatedSlide($objPHPPowerPoint) die oben definierte Funktion zum Einsatz kommt und diese automatisch eine Folie nach den definierten Vorgaben erstellt. Mit diesem Verfahren wird ein Verhalten simuliert, das vergleichbar der Master-Folie in MS PowerPoint ist, nur nicht ganz so elegant. Nach dem „Rahmen“ wird mit dem in Listing 8 gezeigten Code nun der Inhalt der ersten Folie eingefügt.
Listing 8
$shape = $currentSlide->createRichTextShape();
$shape->setHeight(200);
$shape->setWidth(600);
$shape->setOffsetX(10);
$shape->setOffsetY(400);
$shape->getAlignment()->setHorizontal( PHPPowerPoint_Style_Alignment::HORIZONTAL_LEFT );

$textRun = $shape->createTextRun('Introduction to');
$textRun->getFont()->setBold(true);
$textRun->getFont()->setSize(28);
$textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FFFFFFFF' ) );

$shape->createBreak();

$textRun = $shape->createTextRun('PHPPowerPoint');
$textRun->getFont()->setBold(true);
$textRun->getFont()->setSize(60);
$textRun->getFont()->setColor( new PHPPowerPoint_Style_Color( 'FFFFFFFF' ) );
Die Schriftformatierung wirkt noch etwas umständlich und nicht ganz so elegant wie bei den anderen beiden Klassen. Die Ausgabe und Speicherung hingegen kommt jetzt schon sehr bekannt vor:
$objWriter = PHPPowerPoint_IOFactory::createWriter($objPHPPowerPoint, 'PowerPoint2007');
$objWriter->save('SUS.pptx');
Das Resultat des Beispielprogramms zeigt uns Abbildung 6.
Abb. 6: In PHPPowerPoint können Bilder ebenso wie Text in verschiedenen Formatierungen eingesetzt werden
Serealien für das Kind
Gelegentlich kommt der Wunsch auf, ein PHP-Objekt in einer Datenbank oder dem Dateisystem zu speichern. An dieser Stelle ist PHPPowerPoint bereits weit, denn es kann Objekte serialisieren. Mit der Methode PHPPowerPoint_IOFactory::createWriter($objPHPPowerPoint, ‚Serialized‘) und dem entsprechenden $objWriter->save kann ein erzeugtes Objekt gespeichert werden. Zurückholen lässt es sich mit $objPHPPowerPoint = PHPPowerPoint_IOFactory::load(‚DATEI‘). Auf diese Weise kann man sich Teile von Präsentationen vorbereiten, bei Bedarf aufrufen und mit neuen Inhalten ergänzen.
Fazit
Die drei Klassen zeigen deutlich den unterschiedlichen Reifegrad hinsichtlich Funktionalität und Stabilität. Man stellt schnell fest, dass PHPExcel die ausgewachsene Schwester von PHPWord und PHPPowerPoint ist. Die Klasse ist ausgereifter, hat häufigere Releases und mehr Funktionalität. PHPExcel, Jahrgang 2007, überzeugt mit erprobter Methodik und ist in der Version 1.7.6 Production reif für den produktiven Einsatz. PHPWord ist mit der Version 0.6.2 Beta ebenfalls nutzbar. Allerdings muss man noch die eine oder andere Schwäche in Kauf nehmen und manuell Patches einspielen. Andererseits glänzt es bereits jetzt mit Detailfunktionen wie der zentralen Schrift- und Absatzformatierung oder dem Inhaltsverzeichnis, die die Erstellung von Dokumenten unterstützen. PHPPowerPoint kann weder seine Herkunft noch das frühe Entwicklungsstadium verleugnen. Auch hier finden wir bei den anderen Klassen den objektorientierten Aufbau, doch man vermisst einiges, wie die zentrale Definition von Schriftarten oder das Einfügen von Variablen wie {NUMPAGES}. Es ist zu wünschen, dass die drei Klassen sich auch in Zukunft weiter entwickeln und PHPWord und noch mehr PHPPowerPoint etwas zur großen Schwester PHPExcel aufschließen können. Die Klassen haben bewiesen, dass die automatisierte Erstellung von Dokumenten in den verschiedenen MS-Office-Formaten strukturiert und elegant umgesetzt werden kann. Die gleichartigen Methoden und Attribute erleichtern den Wechsel zwischen den Dokumenttypen und helfen dem Entwickler bei seiner Arbeit. Auf diese Weise kann einerseits eine schnelle Umsetzung erfolgen und andererseits der Quellcode langfristig im Sinne des Unternehmens weiter entwickelt werden.
Ralf Hohoff ist seit mehr als elf Jahren in der Softwareentwicklung und dem Projektmanagement tätig. Als technischer Berater der buw consulting GmbH aus Osnabrück unterstützt er Kunden bei der Konzeption und Implementierung von IT-Systemen mit den Schwerpunkten CRM und Wissensmanagement.
Weitere Teile des Artikels: Teil 1 Teil 2 Teil 3
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -