/** * Write paragraphs * * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer * @param \PhpOffice\PhpPowerpoint\Shape\RichText\Paragraph[] $paragraphs * @throws \Exception */ private function writeParagraphs(XMLWriter $objWriter, $paragraphs) { // Loop trough paragraphs foreach ($paragraphs as $paragraph) { // a:p $objWriter->startElement('a:p'); // a:pPr $objWriter->startElement('a:pPr'); $objWriter->writeAttribute('algn', $paragraph->getAlignment()->getHorizontal()); $objWriter->writeAttribute('fontAlgn', $paragraph->getAlignment()->getVertical()); $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($paragraph->getAlignment()->getMarginLeft())); $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($paragraph->getAlignment()->getMarginRight())); $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($paragraph->getAlignment()->getIndent())); $objWriter->writeAttribute('lvl', $paragraph->getAlignment()->getLevel()); // Bullet type specified? if ($paragraph->getBulletStyle()->getBulletType() != Bullet::TYPE_NONE) { // a:buFont $objWriter->startElement('a:buFont'); $objWriter->writeAttribute('typeface', $paragraph->getBulletStyle()->getBulletFont()); $objWriter->endElement(); if ($paragraph->getBulletStyle()->getBulletType() == Bullet::TYPE_BULLET) { // a:buChar $objWriter->startElement('a:buChar'); $objWriter->writeAttribute('char', $paragraph->getBulletStyle()->getBulletChar()); $objWriter->endElement(); } elseif ($paragraph->getBulletStyle()->getBulletType() == Bullet::TYPE_NUMERIC) { // a:buAutoNum $objWriter->startElement('a:buAutoNum'); $objWriter->writeAttribute('type', $paragraph->getBulletStyle()->getBulletNumericStyle()); if ($paragraph->getBulletStyle()->getBulletNumericStartAt() != 1) { $objWriter->writeAttribute('startAt', $paragraph->getBulletStyle()->getBulletNumericStartAt()); } $objWriter->endElement(); } } $objWriter->endElement(); // Loop trough rich text elements $elements = $paragraph->getRichTextElements(); foreach ($elements as $element) { if ($element instanceof BreakElement) { // a:br $objWriter->writeElement('a:br', null); } elseif ($element instanceof Run || $element instanceof TextElement) { // a:r $objWriter->startElement('a:r'); // a:rPr if ($element instanceof Run) { // a:rPr $objWriter->startElement('a:rPr'); // Bold $objWriter->writeAttribute('b', $element->getFont()->isBold() ? 'true' : 'false'); // Italic $objWriter->writeAttribute('i', $element->getFont()->isItalic() ? 'true' : 'false'); // Strikethrough $objWriter->writeAttribute('strike', $element->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'); // Size $objWriter->writeAttribute('sz', $element->getFont()->getSize() * 100); // Underline $objWriter->writeAttribute('u', $element->getFont()->getUnderline()); // Superscript / subscript if ($element->getFont()->isSuperScript() || $element->getFont()->isSubScript()) { if ($element->getFont()->isSuperScript()) { $objWriter->writeAttribute('baseline', '30000'); } elseif ($element->getFont()->isSubScript()) { $objWriter->writeAttribute('baseline', '-25000'); } } // Color - a:solidFill $objWriter->startElement('a:solidFill'); // a:srgbClr $objWriter->startElement('a:srgbClr'); $objWriter->writeAttribute('val', $element->getFont()->getColor()->getRGB()); $objWriter->endElement(); $objWriter->endElement(); // Font - a:latin $objWriter->startElement('a:latin'); $objWriter->writeAttribute('typeface', $element->getFont()->getName()); $objWriter->endElement(); // a:hlinkClick if ($element->hasHyperlink()) { $this->writeHyperlink($objWriter, $element); } $objWriter->endElement(); } // t $objWriter->startElement('a:t'); $objWriter->writeCData(String::controlCharacterPHP2OOXML($element->getText())); $objWriter->endElement(); $objWriter->endElement(); } } $objWriter->endElement(); } }