/** */ public function testConstruct() { // Memory $object = new XMLWriter(); $object->startElement('element'); $object->text('AAA'); $object->endElement(); $this->assertEquals('<element>AAA</element>' . chr(10), $object->getData()); // Disk $object = new XMLWriter(XMLWriter::STORAGE_DISK); $object->startElement('element'); $object->text('BBB'); $object->endElement(); $this->assertEquals('<element>BBB</element>' . chr(10), $object->getData()); }
/** * @param Title $oTitle */ private function writeTitle(Title $oTitle) { if ($oTitle->isVisible()) { // chart:title $this->xmlContent->startElement('chart:title'); $this->xmlContent->writeAttribute('svg:x', Text::numberFormat(CommonDrawing::pixelsToCentimeters($oTitle->getOffsetX()), 3) . 'cm'); $this->xmlContent->writeAttribute('svg:y', Text::numberFormat(CommonDrawing::pixelsToCentimeters($oTitle->getOffsetY()), 3) . 'cm'); $this->xmlContent->writeAttribute('chart:style-name', 'styleTitle'); // > text:p $this->xmlContent->startElement('text:p'); $this->xmlContent->text($oTitle->getText()); // > text:p $this->xmlContent->endElement(); // > chart:title $this->xmlContent->endElement(); } }
/** * Write table Shape * @param XMLWriter $objWriter * @param Table $shape */ public function writeShapeTable(XMLWriter $objWriter, Table $shape) { // draw:frame $objWriter->startElement('draw:frame'); $objWriter->writeAttribute('svg:x', String::numberFormat(CommonDrawing::pixelsToCentimeters($shape->getOffsetX()), 3) . 'cm'); $objWriter->writeAttribute('svg:y', String::numberFormat(CommonDrawing::pixelsToCentimeters($shape->getOffsetY()), 3) . 'cm'); $objWriter->writeAttribute('svg:height', String::numberFormat(CommonDrawing::pixelsToCentimeters($shape->getHeight()), 3) . 'cm'); $objWriter->writeAttribute('svg:width', String::numberFormat(CommonDrawing::pixelsToCentimeters($shape->getWidth()), 3) . 'cm'); // table:table $objWriter->startElement('table:table'); foreach ($shape->getRows() as $keyRow => $shapeRow) { // table:table-row $objWriter->startElement('table:table-row'); $objWriter->writeAttribute('table:style-name', 'gr' . $this->shapeId . 'r' . $keyRow); //@todo getFill $numColspan = 0; foreach ($shapeRow->getCells() as $keyCell => $shapeCell) { if ($numColspan == 0) { // table:table-cell $objWriter->startElement('table:table-cell'); $objWriter->writeAttribute('table:style-name', 'gr' . $this->shapeId . 'r' . $keyRow . 'c' . $keyCell); if ($shapeCell->getColspan() > 1) { $objWriter->writeAttribute('table:number-columns-spanned', $shapeCell->getColspan()); $numColspan = $shapeCell->getColspan() - 1; } // text:p $objWriter->startElement('text:p'); // text:span foreach ($shapeCell->getParagraphs() as $shapeParagraph) { foreach ($shapeParagraph->getRichTextElements() as $shapeRichText) { if ($shapeRichText instanceof TextElement || $shapeRichText instanceof Run) { // text:span $objWriter->startElement('text:span'); if ($shapeRichText instanceof Run) { $objWriter->writeAttribute('text:style-name', 'T_' . $shapeRichText->getFont()->getHashCode()); } if ($shapeRichText->hasHyperlink() === true && $shapeRichText->getHyperlink()->getUrl() != '') { // text:a $objWriter->startElement('text:a'); $objWriter->writeAttribute('xlink:href', $shapeRichText->getHyperlink()->getUrl()); $objWriter->text($shapeRichText->getText()); $objWriter->endElement(); } else { $objWriter->text($shapeRichText->getText()); } $objWriter->endElement(); } elseif ($shapeRichText instanceof BreakElement) { // text:span $objWriter->startElement('text:span'); // text:line-break $objWriter->startElement('text:line-break'); $objWriter->endElement(); $objWriter->endElement(); } } } // > text:p $objWriter->endElement(); // > table:table-cell $objWriter->endElement(); } else { // table:covered-table-cell $objWriter->writeElement('table:covered-table-cell'); $numColspan--; } } // > table:table-row $objWriter->endElement(); } // > table:table $objWriter->endElement(); // > draw:frame $objWriter->endElement(); }
/** * Write individual property * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $property * @param string $value * @return void * * @todo Handle other `$type`: double|date|dateTime|duration|boolean (4th arguments) */ private function writeCustomProperty(XMLWriter $xmlWriter, $property, $value) { $xmlWriter->startElement('meta:user-defined'); $xmlWriter->writeAttribute('meta:name', $property); // if ($type !== null) { // $xmlWriter->writeAttribute('meta:value-type', $type); // } if (Settings::isOutputEscapingEnabled()) { $xmlWriter->text($value); } else { $xmlWriter->writeRaw($value); } $xmlWriter->endElement(); // meta:user-defined }
/** * Write note item. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Footnote|\PhpOffice\PhpWord\Element\Endnote $element * @return void */ protected function writeNote(XMLWriter $xmlWriter, $element) { $xmlWriter->startElement($this->elementNode); $xmlWriter->writeAttribute('w:id', $element->getRelationId()); $xmlWriter->startElement('w:p'); // Paragraph style $styleWriter = new ParagraphStyleWriter($xmlWriter, $element->getParagraphStyle()); $styleWriter->setIsInline(true); $styleWriter->write(); // Reference symbol $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:rPr'); $xmlWriter->startElement('w:rStyle'); $xmlWriter->writeAttribute('w:val', $this->refStyle); $xmlWriter->endElement(); // w:rStyle $xmlWriter->endElement(); // w:rPr $xmlWriter->writeElement($this->refNode); $xmlWriter->endElement(); // w:r // Empty space after refence symbol $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:t'); $xmlWriter->writeAttribute('xml:space', 'preserve'); $xmlWriter->text(' '); $xmlWriter->endElement(); // w:t $xmlWriter->endElement(); // w:r $containerWriter = new Container($xmlWriter, $element); $containerWriter->write(); $xmlWriter->endElement(); // w:p $xmlWriter->endElement(); // $this->elementNode }
/** * Write TOC Field. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\TOC $element * @return void */ private function writeFieldMark(XMLWriter $xmlWriter, TOCElement $element) { $minDepth = $element->getMinDepth(); $maxDepth = $element->getMaxDepth(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'begin'); $xmlWriter->endElement(); $xmlWriter->endElement(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:instrText'); $xmlWriter->writeAttribute('xml:space', 'preserve'); $xmlWriter->text("TOC \\o {$minDepth}-{$maxDepth} \\h \\z \\u"); $xmlWriter->endElement(); $xmlWriter->endElement(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'separate'); $xmlWriter->endElement(); $xmlWriter->endElement(); }