/** * Write link element. * * @return void */ public function write() { $xmlWriter = $this->getXmlWriter(); $element = $this->getElement(); if (!$element instanceof \PhpOffice\PhpWord\Element\Link) { return; } $rId = $element->getRelationId() + ($element->isInSection() ? 6 : 0); $this->startElementP(); $xmlWriter->startElement('w:hyperlink'); if ($element->isInternal()) { $xmlWriter->writeAttribute('w:anchor', $element->getSource()); } else { $xmlWriter->writeAttribute('r:id', 'rId' . $rId); } $xmlWriter->writeAttribute('w:history', '1'); $xmlWriter->startElement('w:r'); $this->writeFontStyle(); $xmlWriter->startElement('w:t'); $xmlWriter->writeAttribute('xml:space', 'preserve'); if (Settings::isOutputEscapingEnabled()) { $xmlWriter->text($element->getText()); } else { $xmlWriter->writeRaw($element->getText()); } $xmlWriter->endElement(); // w:t $xmlWriter->endElement(); // w:r $xmlWriter->endElement(); // w:hyperlink $this->endElementP(); // w:p }
/** * Write element */ public function write() { $xmlWriter = $this->getXmlWriter(); $element = $this->getElement(); if (!$element instanceof \PhpOffice\PhpWord\Element\Link) { return; } if (!$this->withoutP) { $xmlWriter->startElement('text:p'); // text:p } $xmlWriter->startElement('text:a'); $xmlWriter->writeAttribute('xlink:type', 'simple'); $xmlWriter->writeAttribute('xlink:href', $element->getSource()); if (Settings::isOutputEscapingEnabled()) { $xmlWriter->text($element->getText()); } else { $xmlWriter->writeRaw($element->getText()); } $xmlWriter->endElement(); // text:a if (!$this->withoutP) { $xmlWriter->endElement(); // text:p } }
/** * Write preserve text element. * * @return void */ public function write() { $xmlWriter = $this->getXmlWriter(); $element = $this->getElement(); if (!$element instanceof \PhpOffice\PhpWord\Element\PreserveText) { return; } $texts = $element->getText(); if (!is_array($texts)) { $texts = array($texts); } $this->startElementP(); foreach ($texts as $text) { if (substr($text, 0, 1) == '{') { $text = substr($text, 1, -1); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'begin'); $xmlWriter->endElement(); $xmlWriter->endElement(); $xmlWriter->startElement('w:r'); $this->writeFontStyle(); $xmlWriter->startElement('w:instrText'); $xmlWriter->writeAttribute('xml:space', 'preserve'); if (Settings::isOutputEscapingEnabled()) { $xmlWriter->text($text); } else { $xmlWriter->writeRaw($text); } $xmlWriter->endElement(); $xmlWriter->endElement(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'separate'); $xmlWriter->endElement(); $xmlWriter->endElement(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'end'); $xmlWriter->endElement(); $xmlWriter->endElement(); } else { $xmlWriter->startElement('w:r'); $this->writeFontStyle(); $xmlWriter->startElement('w:t'); $xmlWriter->writeAttribute('xml:space', 'preserve'); if (Settings::isOutputEscapingEnabled()) { $xmlWriter->text($this->getText($text)); } else { $xmlWriter->writeRaw($this->getText($text)); } $xmlWriter->endElement(); $xmlWriter->endElement(); } } $this->endElementP(); // w:p }
/** * Write element */ public function write() { $xmlWriter = $this->getXmlWriter(); $element = $this->getElement(); if (!$element instanceof \PhpOffice\PhpWord\Element\Text) { return; } $fontStyle = $element->getFontStyle(); $paragraphStyle = $element->getParagraphStyle(); // @todo Commented for TextRun. Should really checkout this value // $fStyleIsObject = ($fontStyle instanceof Font) ? true : false; $fStyleIsObject = false; if ($fStyleIsObject) { // Don't never be the case, because I browse all sections for cleaning all styles not declared throw new Exception('PhpWord : $fStyleIsObject wouldn\'t be an object'); } else { if (!$this->withoutP) { $xmlWriter->startElement('text:p'); // text:p } if (empty($fontStyle)) { if (empty($paragraphStyle)) { $xmlWriter->writeAttribute('text:style-name', 'P1'); } elseif (is_string($paragraphStyle)) { $xmlWriter->writeAttribute('text:style-name', $paragraphStyle); } if (Settings::isOutputEscapingEnabled()) { $xmlWriter->text($element->getText()); } else { $xmlWriter->writeRaw($element->getText()); } } else { if (empty($paragraphStyle)) { $xmlWriter->writeAttribute('text:style-name', 'Standard'); } elseif (is_string($paragraphStyle)) { $xmlWriter->writeAttribute('text:style-name', $paragraphStyle); } // text:span $xmlWriter->startElement('text:span'); if (is_string($fontStyle)) { $xmlWriter->writeAttribute('text:style-name', $fontStyle); } if (Settings::isOutputEscapingEnabled()) { $xmlWriter->text($element->getText()); } else { $xmlWriter->writeRaw($element->getText()); } $xmlWriter->endElement(); } if (!$this->withoutP) { $xmlWriter->endElement(); // text:p } } }
/** * Write list item * * @return string */ public function write() { if (!$this->element instanceof \PhpOffice\PhpWord\Element\ListItem) { return ''; } if (Settings::isOutputEscapingEnabled()) { $content = '<p>' . $this->escaper->escapeHtml($this->element->getTextObject()->getText()) . '</p>' . PHP_EOL; } else { $content = '<p>' . $this->element->getTextObject()->getText() . '</p>' . PHP_EOL; } return $content; }
/** * Write heading * * @return string */ public function write() { if (!$this->element instanceof \PhpOffice\PhpWord\Element\Title) { return ''; } $tag = 'h' . $this->element->getDepth(); if (Settings::isOutputEscapingEnabled()) { $text = $this->escaper->escapeHtml($this->element->getText()); } else { $text = $this->element->getText(); } $content = "<{$tag}>{$text}</{$tag}>" . PHP_EOL; return $content; }
/** * Write link * * @return string */ public function write() { if (!$this->element instanceof \PhpOffice\PhpWord\Element\Link) { return ''; } $content = ''; $content .= $this->writeOpening(); if (Settings::isOutputEscapingEnabled()) { $content .= "<a href=\"{$this->escaper->escapeHtmlAttr($this->element->getSource())}\">{$this->escaper->escapeHtml($this->element->getText())}</a>"; } else { $content .= "<a href=\"{$this->element->getSource()}\">{$this->element->getText()}</a>"; } $content .= $this->writeClosing(); return $content; }
/** * Write element */ public function write() { $xmlWriter = $this->getXmlWriter(); $element = $this->getElement(); if (!$element instanceof \PhpOffice\PhpWord\Element\Title) { return; } $xmlWriter->startElement('text:h'); $xmlWriter->writeAttribute('text:outline-level', $element->getDepth()); if (Settings::isOutputEscapingEnabled()) { $xmlWriter->text($element->getText()); } else { $xmlWriter->writeRaw($element->getText()); } $xmlWriter->endElement(); // text:h }
/** * Write part * * @return string */ public function write() { $docProps = $this->getParentWriter()->getPhpWord()->getDocInfo(); $propertiesMapping = array('creator' => 'author', 'title' => '', 'description' => '', 'subject' => '', 'keywords' => '', 'category' => '', 'company' => '', 'manager' => ''); $title = $docProps->getTitle(); $title = $title != '' ? $title : 'PHPWord'; $content = ''; $content .= '<head>' . PHP_EOL; $content .= '<meta charset="UTF-8" />' . PHP_EOL; $content .= '<title>' . $title . '</title>' . PHP_EOL; foreach ($propertiesMapping as $key => $value) { $value = $value == '' ? $key : $value; $method = "get" . $key; if ($docProps->{$method}() != '') { $content .= '<meta name="' . $value . '"' . ' content="' . (Settings::isOutputEscapingEnabled() ? $this->escaper->escapeHtmlAttr($docProps->{$method}()) : $docProps->{$method}()) . '"' . ' />' . PHP_EOL; } } $content .= $this->writeStyles(); $content .= '</head>' . PHP_EOL; return $content; }
/** * Write title element. * * @return void */ public function write() { $xmlWriter = $this->getXmlWriter(); $element = $this->getElement(); if (!$element instanceof \PhpOffice\PhpWord\Element\Title) { return; } $style = $element->getStyle(); $xmlWriter->startElement('w:p'); if (!empty($style)) { $xmlWriter->startElement('w:pPr'); $xmlWriter->startElement('w:pStyle'); $xmlWriter->writeAttribute('w:val', $style); $xmlWriter->endElement(); $xmlWriter->endElement(); } $rId = $element->getRelationId(); $bookmarkRId = $element->getPhpWord()->addBookmark(); // Bookmark start for TOC $xmlWriter->startElement('w:bookmarkStart'); $xmlWriter->writeAttribute('w:id', $bookmarkRId); $xmlWriter->writeAttribute('w:name', "_Toc{$rId}"); $xmlWriter->endElement(); // Actual text $xmlWriter->startElement('w:r'); if (Settings::isOutputEscapingEnabled()) { $xmlWriter->writeElement('w:t', $this->getText($element->getText())); } else { $xmlWriter->startElement('w:t'); $xmlWriter->writeRaw($this->getText($element->getText())); $xmlWriter->endElement(); } $xmlWriter->endElement(); // Bookmark end $xmlWriter->startElement('w:bookmarkEnd'); $xmlWriter->writeAttribute('w:id', $bookmarkRId); $xmlWriter->endElement(); $xmlWriter->endElement(); }
/** * Write document information * * @return string */ private function writeInfo() { $docProps = $this->getParentWriter()->getPhpWord()->getDocInfo(); $properties = array('title', 'subject', 'category', 'keywords', 'comment', 'author', 'operator', 'creatim', 'revtim', 'company', 'manager'); $mapping = array('comment' => 'description', 'author' => 'creator', 'operator' => 'lastModifiedBy', 'creatim' => 'created', 'revtim' => 'modified'); $dateFields = array('creatim', 'revtim'); $content = ''; $content .= '{'; $content .= '\\info'; foreach ($properties as $property) { $method = 'get' . (isset($mapping[$property]) ? $mapping[$property] : $property); if (!in_array($property, $dateFields) && Settings::isOutputEscapingEnabled()) { $value = $this->escaper->escape($docProps->{$method}()); } else { $value = $docProps->{$method}(); } $value = in_array($property, $dateFields) ? $this->getDateValue($value) : $value; $content .= "{\\{$property} {$value}}"; } $content .= '}'; $content .= PHP_EOL; return $content; }
/** * Write text element. * * @return void */ public function write() { $xmlWriter = $this->getXmlWriter(); $element = $this->getElement(); if (!$element instanceof \PhpOffice\PhpWord\Element\Text) { return; } $this->startElementP(); $xmlWriter->startElement('w:r'); $this->writeFontStyle(); $xmlWriter->startElement('w:t'); $xmlWriter->writeAttribute('xml:space', 'preserve'); if (Settings::isOutputEscapingEnabled()) { $xmlWriter->text($this->getText($element->getText())); } else { $xmlWriter->writeRaw($this->getText($element->getText())); } $xmlWriter->endElement(); $xmlWriter->endElement(); // w:r $this->endElementP(); // w:p }
/** * Write element. * * @return void */ public function write() { $xmlWriter = $this->getXmlWriter(); $element = $this->getElement(); if (!$element instanceof FormFieldElement) { return; } $type = $element->getType(); $instructions = array('textinput' => 'FORMTEXT', 'checkbox' => 'FORMCHECKBOX', 'dropdown' => 'FORMDROPDOWN'); $instruction = $instructions[$type]; $writeFormField = "write{$type}"; $name = $element->getName(); if ($name === null) { $name = $type . $element->getElementId(); } $value = $element->getValue(); if ($value === null) { $value = str_repeat(' ', self::FILLER_LENGTH); } $this->startElementP(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'begin'); $xmlWriter->startElement('w:ffData'); $xmlWriter->writeElementBlock('w:enabled', 'w:val', 1); $xmlWriter->writeElementBlock('w:name', 'w:val', $name); $xmlWriter->writeElementBlock('w:calcOnExit', 'w:val', 0); $this->{$writeFormField}($xmlWriter, $element); $xmlWriter->endElement(); // w:ffData $xmlWriter->endElement(); // w:fldChar $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); $this->writeFontStyle(); $xmlWriter->startElement('w:instrText'); $xmlWriter->writeAttribute('xml:space', 'preserve'); $xmlWriter->text("{$instruction}"); $xmlWriter->endElement(); // w:instrText $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); $this->writeFontStyle(); $xmlWriter->writeElementBlock('w:fldChar', 'w:fldCharType', 'separate'); $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); $this->writeFontStyle(); $xmlWriter->startElement('w:t'); $xmlWriter->writeAttribute('xml:space', 'preserve'); if (Settings::isOutputEscapingEnabled()) { $xmlWriter->text($value); } else { $xmlWriter->writeRaw($value); } $xmlWriter->endElement(); // w:t $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); $this->writeFontStyle(); $xmlWriter->writeElementBlock('w:fldChar', 'w:fldCharType', 'end'); $xmlWriter->endElement(); // w:r $this->endElementP(); // w:p }
/** * Write title * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\TOC $element * @param \PhpOffice\PhpWord\Element\Title $title * @param bool $writeFieldMark * @return void */ private function writeTitle(XMLWriter $xmlWriter, TOCElement $element, $title, $writeFieldMark) { $tocStyle = $element->getStyleTOC(); $fontStyle = $element->getStyleFont(); $isObject = $fontStyle instanceof Font ? true : false; $rId = $title->getRelationId(); $indent = ($title->getDepth() - 1) * $tocStyle->getIndent(); $xmlWriter->startElement('w:p'); // Write style and field mark $this->writeStyle($xmlWriter, $element, $indent); if ($writeFieldMark) { $this->writeFieldMark($xmlWriter, $element); } // Hyperlink $xmlWriter->startElement('w:hyperlink'); $xmlWriter->writeAttribute('w:anchor', "_Toc{$rId}"); $xmlWriter->writeAttribute('w:history', '1'); // Title text $xmlWriter->startElement('w:r'); if ($isObject) { $styleWriter = new FontStyleWriter($xmlWriter, $fontStyle); $styleWriter->write(); } if (Settings::isOutputEscapingEnabled()) { $xmlWriter->writeElement('w:t', $title->getText()); } else { $xmlWriter->startElement('w:t'); $xmlWriter->writeRaw($title->getText()); $xmlWriter->endElement(); } $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); $xmlWriter->writeElement('w:tab', null); $xmlWriter->endElement(); $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("PAGEREF _Toc{$rId} \\h"); $xmlWriter->endElement(); $xmlWriter->endElement(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'end'); $xmlWriter->endElement(); $xmlWriter->endElement(); $xmlWriter->endElement(); // w:hyperlink $xmlWriter->endElement(); // w:p }
/** * Write element. * * @return void */ public function write() { $xmlWriter = $this->getXmlWriter(); $element = $this->getElement(); if (!$element instanceof \PhpOffice\PhpWord\Element\CheckBox) { return; } $this->startElementP(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'begin'); $xmlWriter->startElement('w:ffData'); $xmlWriter->startElement('w:name'); $xmlWriter->writeAttribute('w:val', $this->getText($element->getName())); $xmlWriter->endElement(); //w:name $xmlWriter->writeAttribute('w:enabled', ''); $xmlWriter->startElement('w:calcOnExit'); $xmlWriter->writeAttribute('w:val', '0'); $xmlWriter->endElement(); //w:calcOnExit $xmlWriter->startElement('w:checkBox'); $xmlWriter->writeAttribute('w:sizeAuto', ''); $xmlWriter->startElement('w:default'); $xmlWriter->writeAttribute('w:val', 0); $xmlWriter->endElement(); //w:default $xmlWriter->endElement(); //w:checkBox $xmlWriter->endElement(); // w:ffData $xmlWriter->endElement(); // w:fldChar $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:instrText'); $xmlWriter->writeAttribute('xml:space', 'preserve'); $xmlWriter->text(' FORMCHECKBOX '); $xmlWriter->endElement(); // w:instrText $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'separate'); $xmlWriter->endElement(); // w:fldChar $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'end'); $xmlWriter->endElement(); // w:fldChar $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); $this->writeFontStyle(); $xmlWriter->startElement('w:t'); $xmlWriter->writeAttribute('xml:space', 'preserve'); if (Settings::isOutputEscapingEnabled()) { $xmlWriter->text($this->getText($element->getText())); } else { $xmlWriter->writeRaw($this->getText($element->getText())); } $xmlWriter->endElement(); // w:t $xmlWriter->endElement(); // w:r $this->endElementP(); // w:p }
/** * 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 }
/** * @param mixed $search * @param mixed $replace * @param integer $limit * * @return void */ public function setValue($search, $replace, $limit = self::MAXIMUM_REPLACEMENTS_DEFAULT) { if (is_array($search)) { foreach ($search as &$item) { $item = self::ensureMacroCompleted($item); } } else { $search = self::ensureMacroCompleted($search); } if (is_array($replace)) { foreach ($replace as &$item) { $item = self::ensureUtf8Encoded($item); } } else { $replace = self::ensureUtf8Encoded($replace); } if (Settings::isOutputEscapingEnabled()) { $xmlEscaper = new Xml(); $replace = $xmlEscaper->escape($replace); } $this->tempDocumentHeaders = $this->setValueForPart($search, $replace, $this->tempDocumentHeaders, $limit); $this->tempDocumentMainPart = $this->setValueForPart($search, $replace, $this->tempDocumentMainPart, $limit); $this->tempDocumentFooters = $this->setValueForPart($search, $replace, $this->tempDocumentFooters, $limit); }
/** * Write ending * * @return string */ protected function writeClosing() { $content = ''; if (!$this->withoutP) { if (Settings::isOutputEscapingEnabled()) { $content .= $this->escaper->escapeHtml($this->closingText); } else { $content .= $this->closingText; } $content .= "</p>" . PHP_EOL; } return $content; }
/** * Write series items. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $type * @param array $values * @return void */ private function writeSeriesItem(XMLWriter $xmlWriter, $type, $values) { $types = array('cat' => array('c:cat', 'c:strLit'), 'val' => array('c:val', 'c:numLit'), 'xVal' => array('c:xVal', 'c:strLit'), 'yVal' => array('c:yVal', 'c:numLit')); list($itemType, $itemLit) = $types[$type]; $xmlWriter->startElement($itemType); $xmlWriter->startElement($itemLit); $index = 0; foreach ($values as $value) { $xmlWriter->startElement('c:pt'); $xmlWriter->writeAttribute('idx', $index); if (\PhpOffice\PhpWord\Settings::isOutputEscapingEnabled()) { $xmlWriter->writeElement('c:v', $value); } else { $xmlWriter->startElement('c:v'); $xmlWriter->writeRaw($value); $xmlWriter->endElement(); } $xmlWriter->endElement(); // c:pt $index++; } $xmlWriter->endElement(); // $itemLit $xmlWriter->endElement(); // $itemType }