public function writeContent()
{
// Create XML writer
$objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
$objWriter->startDocument('1.0', 'UTF-8');
// office:document-content
$objWriter->startElement('office:document-content');
$objWriter->writeAttribute('xmlns:office', 'urn:oasis:names:tc:opendocument:xmlns:office:1.0');
$objWriter->writeAttribute('xmlns:style', 'urn:oasis:names:tc:opendocument:xmlns:style:1.0');
$objWriter->writeAttribute('xmlns:text', 'urn:oasis:names:tc:opendocument:xmlns:text:1.0');
$objWriter->writeAttribute('xmlns:table', 'urn:oasis:names:tc:opendocument:xmlns:table:1.0');
$objWriter->writeAttribute('xmlns:draw', 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0');
$objWriter->writeAttribute('xmlns:fo', 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0');
$objWriter->writeAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');
$objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/');
$objWriter->writeAttribute('xmlns:meta', 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0');
$objWriter->writeAttribute('xmlns:number', 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0');
$objWriter->writeAttribute('xmlns:presentation', 'urn:oasis:names:tc:opendocument:xmlns:presentation:1.0');
$objWriter->writeAttribute('xmlns:svg', 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0');
$objWriter->writeAttribute('xmlns:chart', 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0');
$objWriter->writeAttribute('xmlns:dr3d', 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0');
$objWriter->writeAttribute('xmlns:math', 'http://www.w3.org/1998/Math/MathML');
$objWriter->writeAttribute('xmlns:form', 'urn:oasis:names:tc:opendocument:xmlns:form:1.0');
$objWriter->writeAttribute('xmlns:script', 'urn:oasis:names:tc:opendocument:xmlns:script:1.0');
$objWriter->writeAttribute('xmlns:ooo', 'http://openoffice.org/2004/office');
$objWriter->writeAttribute('xmlns:ooow', 'http://openoffice.org/2004/writer');
$objWriter->writeAttribute('xmlns:oooc', 'http://openoffice.org/2004/calc');
$objWriter->writeAttribute('xmlns:dom', 'http://www.w3.org/2001/xml-events');
$objWriter->writeAttribute('xmlns:xforms', 'http://www.w3.org/2002/xforms');
$objWriter->writeAttribute('xmlns:xsd', 'http://www.w3.org/2001/XMLSchema');
$objWriter->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
$objWriter->writeAttribute('xmlns:smil', 'urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0');
$objWriter->writeAttribute('xmlns:anim', 'urn:oasis:names:tc:opendocument:xmlns:animation:1.0');
$objWriter->writeAttribute('xmlns:rpt', 'http://openoffice.org/2005/report');
$objWriter->writeAttribute('xmlns:of', 'urn:oasis:names:tc:opendocument:xmlns:of:1.2');
$objWriter->writeAttribute('xmlns:rdfa', 'http://docs.oasis-open.org/opendocument/meta/rdfa#');
$objWriter->writeAttribute('xmlns:field', 'urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0');
$objWriter->writeAttribute('xmlns:officeooo', 'http://openoffice.org/2009/office');
$objWriter->writeAttribute('office:version', '1.2');
// office:automatic-styles
$objWriter->startElement('office:automatic-styles');
$this->shapeId = 0;
$incSlide = 0;
foreach ($this->getPresentation()->getAllSlides() as $pSlide) {
// Slides
$this->writeStyleSlide($objWriter, $pSlide, $incSlide);
// Images
$shapes = $pSlide->getShapeCollection();
foreach ($shapes as $shape) {
// Increment $this->shapeId
++$this->shapeId;
// Check type
if ($shape instanceof RichText) {
$this->writeTxtStyle($objWriter, $shape);
}
if ($shape instanceof AbstractDrawing) {
$this->writeDrawingStyle($objWriter, $shape);
}
if ($shape instanceof Line) {
$this->writeLineStyle($objWriter, $shape);
}
if ($shape instanceof Table) {
$this->writeTableStyle($objWriter, $shape);
}
if ($shape instanceof Group) {
$this->writeGroupStyle($objWriter, $shape);
}
}
$incSlide++;
}
// Style : Bullet
if (!empty($this->arrStyleBullet)) {
foreach ($this->arrStyleBullet as $key => $item) {
$oStyle = $item['oStyle'];
$arrLevel = explode(';', $item['level']);
// style:style
$objWriter->startElement('text:list-style');
$objWriter->writeAttribute('style:name', 'L_' . $key);
foreach ($arrLevel as $level) {
if ($level != '') {
$oAlign = $item['oAlign_' . $level];
// text:list-level-style-bullet
$objWriter->startElement('text:list-level-style-bullet');
$objWriter->writeAttribute('text:level', $level + 1);
$objWriter->writeAttribute('text:bullet-char', $oStyle->getBulletChar());
// style:list-level-properties
$objWriter->startElement('style:list-level-properties');
if ($oAlign->getIndent() < 0) {
$objWriter->writeAttribute('text:space-before', CommonDrawing::pixelsToCentimeters($oAlign->getMarginLeft() - -1 * $oAlign->getIndent()) . 'cm');
$objWriter->writeAttribute('text:min-label-width', CommonDrawing::pixelsToCentimeters(-1 * $oAlign->getIndent()) . 'cm');
} else {
$objWriter->writeAttribute('text:space-before', CommonDrawing::pixelsToCentimeters($oAlign->getMarginLeft() - $oAlign->getIndent()) . 'cm');
$objWriter->writeAttribute('text:min-label-width', CommonDrawing::pixelsToCentimeters($oAlign->getIndent()) . 'cm');
}
$objWriter->endElement();
// style:text-properties
$objWriter->startElement('style:text-properties');
$objWriter->writeAttribute('fo:font-family', $oStyle->getBulletFont());
$objWriter->writeAttribute('style:font-family-generic', 'swiss');
$objWriter->writeAttribute('style:use-window-font-color', 'true');
$objWriter->writeAttribute('fo:font-size', '100');
$objWriter->endElement();
$objWriter->endElement();
}
}
$objWriter->endElement();
}
}
// Style : Paragraph
if (!empty($this->arrStyleParagraph)) {
foreach ($this->arrStyleParagraph as $key => $item) {
// style:style
$objWriter->startElement('style:style');
$objWriter->writeAttribute('style:name', 'P_' . $key);
$objWriter->writeAttribute('style:family', 'paragraph');
// style:paragraph-properties
$objWriter->startElement('style:paragraph-properties');
switch ($item->getAlignment()->getHorizontal()) {
case Alignment::HORIZONTAL_LEFT:
$objWriter->writeAttribute('fo:text-align', 'left');
break;
case Alignment::HORIZONTAL_RIGHT:
$objWriter->writeAttribute('fo:text-align', 'right');
break;
case Alignment::HORIZONTAL_CENTER:
$objWriter->writeAttribute('fo:text-align', 'center');
break;
case Alignment::HORIZONTAL_JUSTIFY:
$objWriter->writeAttribute('fo:text-align', 'justify');
break;
case Alignment::HORIZONTAL_DISTRIBUTED:
$objWriter->writeAttribute('fo:text-align', 'justify');
break;
default:
$objWriter->writeAttribute('fo:text-align', 'left');
break;
}
$objWriter->endElement();
$objWriter->endElement();
}
}
// Style : Text : Font
if (!empty($this->arrStyleTextFont)) {
foreach ($this->arrStyleTextFont as $key => $item) {
// style:style
$objWriter->startElement('style:style');
$objWriter->writeAttribute('style:name', 'T_' . $key);
$objWriter->writeAttribute('style:family', 'text');
// style:text-properties
$objWriter->startElement('style:text-properties');
$objWriter->writeAttribute('fo:color', '#' . $item->getFont()->getColor()->getRGB());
$objWriter->writeAttribute('fo:font-family', $item->getFont()->getName());
$objWriter->writeAttribute('fo:font-size', $item->getFont()->getSize() . 'pt');
// @todo : fo:font-style
if ($item->getFont()->isBold()) {
$objWriter->writeAttribute('fo:font-weight', 'bold');
}
$objWriter->writeAttribute('fo:language', $item->getLanguage() ? $item->getLanguage() : 'en-US');
// @todo : style:text-underline-style
$objWriter->endElement();
$objWriter->endElement();
}
}
$objWriter->endElement();
//===============================================
// Body
//===============================================
// office:body
$objWriter->startElement('office:body');
// office:presentation
$objWriter->startElement('office:presentation');
// Write slides
$slideCount = $this->getPresentation()->getSlideCount();
$this->shapeId = 0;
for ($i = 0; $i < $slideCount; ++$i) {
$pSlide = $this->getPresentation()->getSlide($i);
$objWriter->startElement('draw:page');
$name = $pSlide->getName();
if (!is_null($name)) {
$objWriter->writeAttribute('draw:name', $name);
}
$objWriter->writeAttribute('draw:master-page-name', 'Standard');
$objWriter->writeAttribute('draw:style-name', 'stylePage' . $i);
// Images
$shapes = $pSlide->getShapeCollection();
foreach ($shapes as $shape) {
// Increment $this->shapeId
++$this->shapeId;
// Check type
if ($shape instanceof RichText) {
$this->writeShapeTxt($objWriter, $shape);
} elseif ($shape instanceof Table) {
$this->writeShapeTable($objWriter, $shape);
} elseif ($shape instanceof Line) {
$this->writeShapeLine($objWriter, $shape);
} elseif ($shape instanceof Chart) {
$this->writeShapeChart($objWriter, $shape);
} elseif ($shape instanceof Media) {
$this->writeShapeMedia($objWriter, $shape);
} elseif ($shape instanceof ShapeDrawing\AbstractDrawingAdapter) {
$this->writeShapeDrawing($objWriter, $shape);
} elseif ($shape instanceof Group) {
$this->writeShapeGroup($objWriter, $shape);
} elseif ($shape instanceof Comment) {
$this->writeShapeComment($objWriter, $shape);
}
}
// Slide Note
if ($pSlide->getNote() instanceof Note) {
$this->writeSlideNote($objWriter, $pSlide->getNote());
}
$objWriter->endElement();
}
if ($this->getPresentation()->getPresentationProperties()->isLoopContinuouslyUntilEsc()) {
$objWriter->startElement('presentation:settings');
$objWriter->writeAttribute('presentation:endless', 'true');
$objWriter->writeAttribute('presentation:pause', 'P0s');
$objWriter->writeAttribute('presentation:mouse-visible', 'false');
$objWriter->endElement();
}
// > office:presentation
$objWriter->endElement();
// > office:body
$objWriter->endElement();
// > office:document-content
$objWriter->endElement();
// Return
return $objWriter->getData();
}