writeInfo(); $content .= $this->writeFormatting(); $content .= $this->writeSections(); return $content; } /** * Write document information * * @return string */ private function writeInfo() { $docProps = $this->getParentWriter()->getPhpWord()->getDocumentProperties(); $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' . (array_key_exists($property, $mapping) ? $mapping[$property] : $property); $value = $docProps->$method(); $value = in_array($property, $dateFields) ? $this->getDateValue($value) : $value; $content .= "{\\{$property} {$value}}"; } $content .= '}'; $content .= PHP_EOL; return $content; } /** * Write document formatting properties * * @return string */ private function writeFormatting() { $content = ''; $content .= '\deftab720'; // Set the default tab size (720 twips) $content .= '\viewkind1'; // Set the view mode of the document $content .= '\uc1'; // Set the numberof bytes that follows a unicode character $content .= '\pard'; // Resets to default paragraph properties. $content .= '\nowidctlpar'; // No widow/orphan control $content .= '\lang1036'; // Applies a language to a text run (1036 : French (France)) $content .= '\kerning1'; // Point size (in half-points) above which to kern character pairs $content .= '\fs' . (Settings::getDefaultFontSize() * 2); // Set the font size in half-points $content .= PHP_EOL; return $content; } /** * Write sections * * @return string */ private function writeSections() { $content = ''; $sections = $this->getParentWriter()->getPhpWord()->getSections(); foreach ($sections as $section) { $writer = new Container($this->getParentWriter(), $section); $content .= $writer->write(); } return $content; } /** * Get date value * * The format of date value is `\yr?\mo?\dy?\hr?\min?\sec?` * * @param int $value * @return string */ private function getDateValue($value) { $dateParts = array( 'Y' => 'yr', 'm' => 'mo', 'd' => 'dy', 'H' => 'hr', 'i' => 'min', 's' => 'sec', ); $result = ''; foreach ($dateParts as $dateFormat => $controlWord) { $result .= '\\' . $controlWord . date($dateFormat, $value); } return $result; } }