Word2007 Writer: Refactor writer parts using composite pattern
This commit is contained in:
parent
704cc2fe04
commit
4039304ba0
@ -18,6 +18,8 @@ This release changed PHPWord license from LGPL 2.1 to LGPL 3.
|
|||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
- Static classes `Footnotes`, `Endnotes`, and `TOC`
|
- Static classes `Footnotes`, `Endnotes`, and `TOC`
|
||||||
|
- `Writer\Word2007\Part`: `Numbering::writeNumbering()`, `Settings::writeSettings()`, `WebSettings::writeWebSettings()`, `ContentTypes::writeContentTypes()`, `Styles::writeStyles()`, `Document::writeDocument()` all changed into `write()`
|
||||||
|
- `Writer\Word2007\Part\DocProps`: Split into `Writer\Word2007\Part\DocPropsCore` and `Writer\Word2007\Part\DocPropsApp`
|
||||||
|
|
||||||
### Miscellaneous
|
### Miscellaneous
|
||||||
|
|
||||||
@ -28,6 +30,7 @@ This release changed PHPWord license from LGPL 2.1 to LGPL 3.
|
|||||||
- Refactor: PHPMD recommendation: Change all `get...` method that returns `boolean` into `is...` or `has...` - @ivanlanin
|
- Refactor: PHPMD recommendation: Change all `get...` method that returns `boolean` into `is...` or `has...` - @ivanlanin
|
||||||
- Docs: Create gh-pages branch for API documentation - @Progi1984 GH-154
|
- Docs: Create gh-pages branch for API documentation - @Progi1984 GH-154
|
||||||
- QA: Add `.scrutinizer.yml` and include `composer.lock` for preparation to Scrutinizer - @ivanlanin GH-186
|
- QA: Add `.scrutinizer.yml` and include `composer.lock` for preparation to Scrutinizer - @ivanlanin GH-186
|
||||||
|
- Word2007 Writer: Refactor writer parts using composite pattern - @ivanlanin
|
||||||
|
|
||||||
## 0.10.0 - 4 May 2014
|
## 0.10.0 - 4 May 2014
|
||||||
|
|
||||||
|
|||||||
@ -32,14 +32,14 @@ class Word2007 extends AbstractWriter implements WriterInterface
|
|||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $cTypes = array('default' => array(), 'override' => array());
|
private $contentTypes = array('default' => array(), 'override' => array());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Document relationship
|
* Document relationship
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $docRels = array();
|
private $relationships = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new Word2007 writer
|
* Create new Word2007 writer
|
||||||
@ -52,7 +52,7 @@ class Word2007 extends AbstractWriter implements WriterInterface
|
|||||||
$this->setPhpWord($phpWord);
|
$this->setPhpWord($phpWord);
|
||||||
|
|
||||||
// Create parts
|
// Create parts
|
||||||
$parts = array('ContentTypes', 'Rels', 'DocProps', 'Document', 'Styles',
|
$parts = array('ContentTypes', 'RelsMain', 'RelsDocument', 'DocPropsApp', 'DocPropsCore', 'Document', 'Styles',
|
||||||
'Numbering', 'Settings', 'WebSettings', 'Header', 'Footer', 'Footnotes',
|
'Numbering', 'Settings', 'WebSettings', 'Header', 'Footer', 'Footnotes',
|
||||||
'Endnotes', 'FontTable', 'Theme');
|
'Endnotes', 'FontTable', 'Theme');
|
||||||
foreach ($parts as $part) {
|
foreach ($parts as $part) {
|
||||||
@ -81,7 +81,7 @@ class Word2007 extends AbstractWriter implements WriterInterface
|
|||||||
$objZip = $this->getZipArchive($filename);
|
$objZip = $this->getZipArchive($filename);
|
||||||
|
|
||||||
// Content types
|
// Content types
|
||||||
$this->cTypes['default'] = array(
|
$this->contentTypes['default'] = array(
|
||||||
'rels' => 'application/vnd.openxmlformats-package.relationships+xml',
|
'rels' => 'application/vnd.openxmlformats-package.relationships+xml',
|
||||||
'xml' => 'application/xml',
|
'xml' => 'application/xml',
|
||||||
);
|
);
|
||||||
@ -92,7 +92,7 @@ class Word2007 extends AbstractWriter implements WriterInterface
|
|||||||
$this->addFilesToPackage($objZip, $sectionMedia);
|
$this->addFilesToPackage($objZip, $sectionMedia);
|
||||||
$this->registerContentTypes($sectionMedia);
|
$this->registerContentTypes($sectionMedia);
|
||||||
foreach ($sectionMedia as $element) {
|
foreach ($sectionMedia as $element) {
|
||||||
$this->docRels[] = $element;
|
$this->relationships[] = $element;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,16 +112,16 @@ class Word2007 extends AbstractWriter implements WriterInterface
|
|||||||
$this->addNotes($objZip, $rId, 'endnote');
|
$this->addNotes($objZip, $rId, 'endnote');
|
||||||
|
|
||||||
// Write parts
|
// Write parts
|
||||||
$objZip->addFromString('[Content_Types].xml', $this->getWriterPart('contenttypes')->writeContentTypes($this->cTypes));
|
$objZip->addFromString('[Content_Types].xml', $this->getWriterPart('contenttypes')->write());
|
||||||
$objZip->addFromString('_rels/.rels', $this->getWriterPart('rels')->writeMainRels());
|
$objZip->addFromString('_rels/.rels', $this->getWriterPart('relsmain')->write());
|
||||||
$objZip->addFromString('docProps/app.xml', $this->getWriterPart('docprops')->writeDocPropsApp($this->phpWord));
|
$objZip->addFromString('docProps/app.xml', $this->getWriterPart('docpropsapp')->write());
|
||||||
$objZip->addFromString('docProps/core.xml', $this->getWriterPart('docprops')->writeDocPropsCore($this->phpWord));
|
$objZip->addFromString('docProps/core.xml', $this->getWriterPart('docpropscore')->write());
|
||||||
$objZip->addFromString('word/_rels/document.xml.rels', $this->getWriterPart('rels')->writeDocRels($this->docRels));
|
$objZip->addFromString('word/_rels/document.xml.rels', $this->getWriterPart('relsdocument')->write());
|
||||||
$objZip->addFromString('word/document.xml', $this->getWriterPart('document')->writeDocument($this->phpWord));
|
$objZip->addFromString('word/document.xml', $this->getWriterPart('document')->write());
|
||||||
$objZip->addFromString('word/styles.xml', $this->getWriterPart('styles')->writeStyles($this->phpWord));
|
$objZip->addFromString('word/styles.xml', $this->getWriterPart('styles')->write());
|
||||||
$objZip->addFromString('word/numbering.xml', $this->getWriterPart('numbering')->writeNumbering());
|
$objZip->addFromString('word/numbering.xml', $this->getWriterPart('numbering')->write());
|
||||||
$objZip->addFromString('word/settings.xml', $this->getWriterPart('settings')->writeSettings());
|
$objZip->addFromString('word/settings.xml', $this->getWriterPart('settings')->write());
|
||||||
$objZip->addFromString('word/webSettings.xml', $this->getWriterPart('websettings')->writeWebSettings());
|
$objZip->addFromString('word/webSettings.xml', $this->getWriterPart('websettings')->write());
|
||||||
$objZip->addFromString('word/fontTable.xml', $this->getWriterPart('fonttable')->write());
|
$objZip->addFromString('word/fontTable.xml', $this->getWriterPart('fonttable')->write());
|
||||||
$objZip->addFromString('word/theme/theme1.xml', $this->getWriterPart('theme')->write());
|
$objZip->addFromString('word/theme/theme1.xml', $this->getWriterPart('theme')->write());
|
||||||
|
|
||||||
@ -136,6 +136,26 @@ class Word2007 extends AbstractWriter implements WriterInterface
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get content types
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getContentTypes()
|
||||||
|
{
|
||||||
|
return $this->contentTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get content types
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getRelationships()
|
||||||
|
{
|
||||||
|
return $this->relationships;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add header/footer media files
|
* Add header/footer media files
|
||||||
*
|
*
|
||||||
@ -177,8 +197,8 @@ class Word2007 extends AbstractWriter implements WriterInterface
|
|||||||
$elmObject->setRelationId(++$rId);
|
$elmObject->setRelationId(++$rId);
|
||||||
$elmFile = "{$elmType}{$elmCount}.xml";
|
$elmFile = "{$elmType}{$elmCount}.xml";
|
||||||
$objZip->addFromString("word/$elmFile", $this->getWriterPart($elmType)->$writeFunction($elmObject));
|
$objZip->addFromString("word/$elmFile", $this->getWriterPart($elmType)->$writeFunction($elmObject));
|
||||||
$this->cTypes['override']["/word/$elmFile"] = $elmType;
|
$this->contentTypes['override']["/word/$elmFile"] = $elmType;
|
||||||
$this->docRels[] = array('target' => $elmFile, 'type' => $elmType, 'rID' => $rId);
|
$this->relationships[] = array('target' => $elmFile, 'type' => $elmType, 'rID' => $rId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,8 +212,8 @@ class Word2007 extends AbstractWriter implements WriterInterface
|
|||||||
private function addNotes($objZip, &$rId, $noteType = 'footnote')
|
private function addNotes($objZip, &$rId, $noteType = 'footnote')
|
||||||
{
|
{
|
||||||
$noteType = ($noteType == 'endnote') ? 'endnote' : 'footnote';
|
$noteType = ($noteType == 'endnote') ? 'endnote' : 'footnote';
|
||||||
$noteTypePlural = "{$noteType}s";
|
$partName = "{$noteType}s";
|
||||||
$method = 'get' . $noteTypePlural;
|
$method = 'get' . $partName;
|
||||||
$collection = $this->phpWord->$method();
|
$collection = $this->phpWord->$method();
|
||||||
|
|
||||||
// Add footnotes media files, relations, and contents
|
// Add footnotes media files, relations, and contents
|
||||||
@ -202,12 +222,12 @@ class Word2007 extends AbstractWriter implements WriterInterface
|
|||||||
$this->addFilesToPackage($objZip, $media);
|
$this->addFilesToPackage($objZip, $media);
|
||||||
$this->registerContentTypes($media);
|
$this->registerContentTypes($media);
|
||||||
if (!empty($media)) {
|
if (!empty($media)) {
|
||||||
$objZip->addFromString("word/_rels/{$noteTypePlural}.xml.rels", $this->getWriterPart('rels')->writeMediaRels($media));
|
$objZip->addFromString("word/_rels/{$partName}.xml.rels", $this->getWriterPart('rels')->writeMediaRels($media));
|
||||||
}
|
}
|
||||||
$elements = $collection->getItems();
|
$elements = $collection->getItems();
|
||||||
$objZip->addFromString("word/{$noteTypePlural}.xml", $this->getWriterPart($noteTypePlural)->write($elements));
|
$objZip->addFromString("word/{$partName}.xml", $this->getWriterPart($partName)->write($elements));
|
||||||
$this->cTypes['override']["/word/{$noteTypePlural}.xml"] = $noteTypePlural;
|
$this->contentTypes['override']["/word/{$partName}.xml"] = $partName;
|
||||||
$this->docRels[] = array('target' => "{$noteTypePlural}.xml", 'type' => $noteTypePlural, 'rID' => ++$rId);
|
$this->relationships[] = array('target' => "{$partName}.xml", 'type' => $partName, 'rID' => ++$rId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,12 +242,12 @@ class Word2007 extends AbstractWriter implements WriterInterface
|
|||||||
$mediumType = $medium['type'];
|
$mediumType = $medium['type'];
|
||||||
if ($mediumType == 'image') {
|
if ($mediumType == 'image') {
|
||||||
$extension = $medium['imageExtension'];
|
$extension = $medium['imageExtension'];
|
||||||
if (!array_key_exists($extension, $this->cTypes['default'])) {
|
if (!array_key_exists($extension, $this->contentTypes['default'])) {
|
||||||
$this->cTypes['default'][$extension] = $medium['imageType'];
|
$this->contentTypes['default'][$extension] = $medium['imageType'];
|
||||||
}
|
}
|
||||||
} elseif ($mediumType == 'object') {
|
} elseif ($mediumType == 'object') {
|
||||||
if (!array_key_exists('bin', $this->cTypes['default'])) {
|
if (!array_key_exists('bin', $this->contentTypes['default'])) {
|
||||||
$this->cTypes['default']['bin'] = 'application/vnd.openxmlformats-officedocument.oleObject';
|
$this->contentTypes['default']['bin'] = 'application/vnd.openxmlformats-officedocument.oleObject';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,11 +27,11 @@ class ContentTypes extends AbstractPart
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Write [Content_Types].xml
|
* Write [Content_Types].xml
|
||||||
*
|
|
||||||
* @param array $contentTypes
|
|
||||||
*/
|
*/
|
||||||
public function writeContentTypes($contentTypes)
|
public function write()
|
||||||
{
|
{
|
||||||
|
$contentTypes = $this->parentWriter->getContentTypes();
|
||||||
|
|
||||||
$openXMLPrefix = 'application/vnd.openxmlformats-';
|
$openXMLPrefix = 'application/vnd.openxmlformats-';
|
||||||
$wordMLPrefix = $openXMLPrefix . 'officedocument.wordprocessingml.';
|
$wordMLPrefix = $openXMLPrefix . 'officedocument.wordprocessingml.';
|
||||||
$overrides = array(
|
$overrides = array(
|
||||||
@ -90,4 +90,17 @@ class ContentTypes extends AbstractPart
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write [Content_Types].xml
|
||||||
|
*
|
||||||
|
* @param array $contentTypes
|
||||||
|
* @deprecated 0.11.0
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function writeContentTypes($contentTypes)
|
||||||
|
{
|
||||||
|
$contentTypes = null; // dummy assignment
|
||||||
|
return $this->write();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
54
src/PhpWord/Writer/Word2007/Part/DocPropsApp.php
Normal file
54
src/PhpWord/Writer/Word2007/Part/DocPropsApp.php
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is part of PHPWord - A pure PHP library for reading and writing
|
||||||
|
* word processing documents.
|
||||||
|
*
|
||||||
|
* PHPWord is free software distributed under the terms of the GNU Lesser
|
||||||
|
* General Public License version 3 as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please read the LICENSE
|
||||||
|
* file that was distributed with this source code. For the full list of
|
||||||
|
* contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
|
||||||
|
*
|
||||||
|
* @link https://github.com/PHPOffice/PHPWord
|
||||||
|
* @copyright 2010-2014 PHPWord contributors
|
||||||
|
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace PhpOffice\PhpWord\Writer\Word2007\Part;
|
||||||
|
|
||||||
|
use PhpOffice\PhpWord\Exception\Exception;
|
||||||
|
use PhpOffice\PhpWord\PhpWord;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Word2007 extended document properties part writer
|
||||||
|
*
|
||||||
|
* @since 0.11.0
|
||||||
|
*/
|
||||||
|
class DocPropsApp extends AbstractPart
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Write docProps/app.xml
|
||||||
|
*/
|
||||||
|
public function write()
|
||||||
|
{
|
||||||
|
$phpWord = $this->parentWriter->getPhpWord();
|
||||||
|
if (is_null($phpWord)) {
|
||||||
|
throw new Exception('No PhpWord assigned.');
|
||||||
|
}
|
||||||
|
$xmlWriter = $this->getXmlWriter();
|
||||||
|
|
||||||
|
$xmlWriter->startDocument('1.0', 'UTF-8', 'yes');
|
||||||
|
$xmlWriter->startElement('Properties');
|
||||||
|
$xmlWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties');
|
||||||
|
$xmlWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes');
|
||||||
|
|
||||||
|
$xmlWriter->writeElement('Application', 'PHPWord');
|
||||||
|
$xmlWriter->writeElement('Company', $phpWord->getDocumentProperties()->getCompany());
|
||||||
|
$xmlWriter->writeElement('Manager', $phpWord->getDocumentProperties()->getManager());
|
||||||
|
|
||||||
|
$xmlWriter->endElement(); // Properties
|
||||||
|
|
||||||
|
return $xmlWriter->getData();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -21,44 +21,20 @@ use PhpOffice\PhpWord\Exception\Exception;
|
|||||||
use PhpOffice\PhpWord\PhpWord;
|
use PhpOffice\PhpWord\PhpWord;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Word2007 document properties part writer
|
* Word2007 core document properties part writer
|
||||||
|
*
|
||||||
|
* @since 0.11.0
|
||||||
*/
|
*/
|
||||||
class DocProps extends AbstractPart
|
class DocPropsCore extends AbstractPart
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Write docProps/app.xml
|
|
||||||
*/
|
|
||||||
public function writeDocPropsApp(PhpWord $phpWord = null)
|
|
||||||
{
|
|
||||||
if (is_null($phpWord)) {
|
|
||||||
throw new Exception("No PhpWord assigned.");
|
|
||||||
}
|
|
||||||
$xmlWriter = $this->getXmlWriter();
|
|
||||||
|
|
||||||
$xmlWriter->startDocument('1.0', 'UTF-8', 'yes');
|
|
||||||
$xmlWriter->startElement('Properties');
|
|
||||||
$xmlWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties');
|
|
||||||
$xmlWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes');
|
|
||||||
|
|
||||||
$xmlWriter->writeElement('Application', 'PHPWord');
|
|
||||||
$xmlWriter->writeElement('Company', $phpWord->getDocumentProperties()->getCompany());
|
|
||||||
$xmlWriter->writeElement('Manager', $phpWord->getDocumentProperties()->getManager());
|
|
||||||
|
|
||||||
$xmlWriter->endElement(); // Properties
|
|
||||||
|
|
||||||
return $xmlWriter->getData();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write docProps/core.xml
|
* Write docProps/core.xml
|
||||||
*
|
|
||||||
* @param \PhpOffice\PhpWord\PhpWord $phpWord
|
|
||||||
*/
|
*/
|
||||||
public function writeDocPropsCore(PhpWord $phpWord = null)
|
public function write()
|
||||||
{
|
{
|
||||||
|
$phpWord = $this->parentWriter->getPhpWord();
|
||||||
if (is_null($phpWord)) {
|
if (is_null($phpWord)) {
|
||||||
throw new Exception("No PhpWord assigned.");
|
throw new Exception('No PhpWord assigned.');
|
||||||
}
|
}
|
||||||
$xmlWriter = $this->getXmlWriter();
|
$xmlWriter = $this->getXmlWriter();
|
||||||
|
|
||||||
@ -31,14 +31,14 @@ class Document extends AbstractPart
|
|||||||
/**
|
/**
|
||||||
* Write word/document.xml
|
* Write word/document.xml
|
||||||
*
|
*
|
||||||
* @param \PhpOffice\PhpWord\PhpWord $phpWord
|
|
||||||
* @return string
|
* @return string
|
||||||
* @throws \PhpOffice\PhpWord\Exception\Exception
|
* @throws \PhpOffice\PhpWord\Exception\Exception
|
||||||
*/
|
*/
|
||||||
public function writeDocument(PhpWord $phpWord = null)
|
public function write()
|
||||||
{
|
{
|
||||||
|
$phpWord = $this->parentWriter->getPhpWord();
|
||||||
if (is_null($phpWord)) {
|
if (is_null($phpWord)) {
|
||||||
throw new Exception("No PhpWord assigned.");
|
throw new Exception('No PhpWord assigned.');
|
||||||
}
|
}
|
||||||
$xmlWriter = $this->getXmlWriter();
|
$xmlWriter = $this->getXmlWriter();
|
||||||
$sections = $phpWord->getSections();
|
$sections = $phpWord->getSections();
|
||||||
@ -133,4 +133,17 @@ class Document extends AbstractPart
|
|||||||
|
|
||||||
$xmlWriter->endElement(); // w:sectPr
|
$xmlWriter->endElement(); // w:sectPr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write word/document.xml
|
||||||
|
*
|
||||||
|
* @param \PhpOffice\PhpWord\PhpWord $phpWord
|
||||||
|
* @deprecated 0.11.0
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function writeDocument(PhpWord $phpWord = null)
|
||||||
|
{
|
||||||
|
$this->parentWriter->setPhpWord($phpWord);
|
||||||
|
return $this->write();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,7 +29,7 @@ class Numbering extends AbstractPart
|
|||||||
/**
|
/**
|
||||||
* Write word/numbering.xml
|
* Write word/numbering.xml
|
||||||
*/
|
*/
|
||||||
public function writeNumbering()
|
public function write()
|
||||||
{
|
{
|
||||||
$styles = Style::getStyles();
|
$styles = Style::getStyles();
|
||||||
|
|
||||||
@ -66,12 +66,6 @@ class Numbering extends AbstractPart
|
|||||||
if (is_array($levels)) {
|
if (is_array($levels)) {
|
||||||
foreach ($levels as $levelNum => $levelObject) {
|
foreach ($levels as $levelNum => $levelObject) {
|
||||||
if ($levelObject instanceof NumberingLevel) {
|
if ($levelObject instanceof NumberingLevel) {
|
||||||
$start = $levelObject->getStart();
|
|
||||||
$format = $levelObject->getFormat();
|
|
||||||
$restart = $levelObject->getRestart();
|
|
||||||
$suffix = $levelObject->getSuffix();
|
|
||||||
$text = $levelObject->getText();
|
|
||||||
$align = $levelObject->getAlign();
|
|
||||||
$tabPos = $levelObject->getTabPos();
|
$tabPos = $levelObject->getTabPos();
|
||||||
$left = $levelObject->getLeft();
|
$left = $levelObject->getLeft();
|
||||||
$hanging = $levelObject->getHanging();
|
$hanging = $levelObject->getHanging();
|
||||||
@ -81,36 +75,25 @@ class Numbering extends AbstractPart
|
|||||||
$xmlWriter->startElement('w:lvl');
|
$xmlWriter->startElement('w:lvl');
|
||||||
$xmlWriter->writeAttribute('w:ilvl', $levelNum);
|
$xmlWriter->writeAttribute('w:ilvl', $levelNum);
|
||||||
|
|
||||||
if (!is_null($start)) {
|
// Numbering level properties
|
||||||
$xmlWriter->startElement('w:start');
|
$properties = array(
|
||||||
$xmlWriter->writeAttribute('w:val', $start);
|
'start' => 'start',
|
||||||
|
'format' => 'numFmt',
|
||||||
|
'restart' => 'lvlRestart',
|
||||||
|
'suffix' => 'suff',
|
||||||
|
'text' => 'lvlText',
|
||||||
|
'align' => 'lvlJc'
|
||||||
|
);
|
||||||
|
foreach ($properties as $property => $nodeName) {
|
||||||
|
$getMethod = "get{$property}";
|
||||||
|
if (!is_null($levelObject->$getMethod())) {
|
||||||
|
$xmlWriter->startElement("w:{$nodeName}");
|
||||||
|
$xmlWriter->writeAttribute('w:val', $levelObject->$getMethod());
|
||||||
$xmlWriter->endElement(); // w:start
|
$xmlWriter->endElement(); // w:start
|
||||||
}
|
}
|
||||||
if (!is_null($format)) {
|
|
||||||
$xmlWriter->startElement('w:numFmt');
|
|
||||||
$xmlWriter->writeAttribute('w:val', $format);
|
|
||||||
$xmlWriter->endElement(); // w:numFmt
|
|
||||||
}
|
|
||||||
if (!is_null($restart)) {
|
|
||||||
$xmlWriter->startElement('w:lvlRestart');
|
|
||||||
$xmlWriter->writeAttribute('w:val', $restart);
|
|
||||||
$xmlWriter->endElement(); // w:lvlRestart
|
|
||||||
}
|
|
||||||
if (!is_null($suffix)) {
|
|
||||||
$xmlWriter->startElement('w:suff');
|
|
||||||
$xmlWriter->writeAttribute('w:val', $suffix);
|
|
||||||
$xmlWriter->endElement(); // w:suff
|
|
||||||
}
|
|
||||||
if (!is_null($text)) {
|
|
||||||
$xmlWriter->startElement('w:lvlText');
|
|
||||||
$xmlWriter->writeAttribute('w:val', $text);
|
|
||||||
$xmlWriter->endElement(); // w:start
|
|
||||||
}
|
|
||||||
if (!is_null($align)) {
|
|
||||||
$xmlWriter->startElement('w:lvlJc');
|
|
||||||
$xmlWriter->writeAttribute('w:val', $align);
|
|
||||||
$xmlWriter->endElement(); // w:lvlJc
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Paragraph styles
|
||||||
if (!is_null($tabPos) || !is_null($left) || !is_null($hanging)) {
|
if (!is_null($tabPos) || !is_null($left) || !is_null($hanging)) {
|
||||||
$xmlWriter->startElement('w:pPr');
|
$xmlWriter->startElement('w:pPr');
|
||||||
if (!is_null($tabPos)) {
|
if (!is_null($tabPos)) {
|
||||||
@ -133,6 +116,8 @@ class Numbering extends AbstractPart
|
|||||||
}
|
}
|
||||||
$xmlWriter->endElement(); // w:pPr
|
$xmlWriter->endElement(); // w:pPr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Font styles
|
||||||
if (!is_null($font) || !is_null($hint)) {
|
if (!is_null($font) || !is_null($hint)) {
|
||||||
$xmlWriter->startElement('w:rPr');
|
$xmlWriter->startElement('w:rPr');
|
||||||
$xmlWriter->startElement('w:rFonts');
|
$xmlWriter->startElement('w:rFonts');
|
||||||
@ -182,4 +167,15 @@ class Numbering extends AbstractPart
|
|||||||
{
|
{
|
||||||
return strtoupper(substr(md5(rand()), 0, $length));
|
return strtoupper(substr(md5(rand()), 0, $length));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write numbering
|
||||||
|
*
|
||||||
|
* @deprecated 0.11.0
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function writeNumbering()
|
||||||
|
{
|
||||||
|
return $this->write();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,43 +32,6 @@ class Rels extends AbstractPart
|
|||||||
*/
|
*/
|
||||||
const RELS_BASE = 'http://schemas.openxmlformats.org/';
|
const RELS_BASE = 'http://schemas.openxmlformats.org/';
|
||||||
|
|
||||||
/**
|
|
||||||
* Write _rels/.rels
|
|
||||||
*/
|
|
||||||
public function writeMainRels()
|
|
||||||
{
|
|
||||||
$xmlRels = array(
|
|
||||||
'docProps/core.xml' => 'package/2006/relationships/metadata/core-properties',
|
|
||||||
'docProps/app.xml' => 'officeDocument/2006/relationships/extended-properties',
|
|
||||||
'word/document.xml' => 'officeDocument/2006/relationships/officeDocument',
|
|
||||||
);
|
|
||||||
$xmlWriter = $this->getXmlWriter();
|
|
||||||
$this->writeRels($xmlWriter, $xmlRels);
|
|
||||||
|
|
||||||
return $xmlWriter->getData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write word/_rels/document.xml.rels
|
|
||||||
*
|
|
||||||
* @param array $mediaRels
|
|
||||||
*/
|
|
||||||
public function writeDocRels($mediaRels)
|
|
||||||
{
|
|
||||||
$xmlRels = array(
|
|
||||||
'styles.xml' => 'officeDocument/2006/relationships/styles',
|
|
||||||
'numbering.xml' => 'officeDocument/2006/relationships/numbering',
|
|
||||||
'settings.xml' => 'officeDocument/2006/relationships/settings',
|
|
||||||
'theme/theme1.xml' => 'officeDocument/2006/relationships/theme',
|
|
||||||
'webSettings.xml' => 'officeDocument/2006/relationships/webSettings',
|
|
||||||
'fontTable.xml' => 'officeDocument/2006/relationships/fontTable',
|
|
||||||
);
|
|
||||||
$xmlWriter = $this->getXmlWriter();
|
|
||||||
$this->writeRels($xmlWriter, $xmlRels, $mediaRels);
|
|
||||||
|
|
||||||
return $xmlWriter->getData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write word/_rels/(header|footer|footnotes)*.xml.rels
|
* Write word/_rels/(header|footer|footnotes)*.xml.rels
|
||||||
*
|
*
|
||||||
@ -90,7 +53,7 @@ class Rels extends AbstractPart
|
|||||||
* @param null|array $mediaRels
|
* @param null|array $mediaRels
|
||||||
* @param integer $relId
|
* @param integer $relId
|
||||||
*/
|
*/
|
||||||
private function writeRels(XMLWriter $xmlWriter, $xmlRels = null, $mediaRels = null, $relId = 1)
|
protected function writeRels(XMLWriter $xmlWriter, $xmlRels = null, $mediaRels = null, $relId = 1)
|
||||||
{
|
{
|
||||||
$xmlWriter->startDocument('1.0', 'UTF-8', 'yes');
|
$xmlWriter->startDocument('1.0', 'UTF-8', 'yes');
|
||||||
$xmlWriter->startElement('Relationships');
|
$xmlWriter->startElement('Relationships');
|
||||||
|
|||||||
47
src/PhpWord/Writer/Word2007/Part/RelsDocument.php
Normal file
47
src/PhpWord/Writer/Word2007/Part/RelsDocument.php
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is part of PHPWord - A pure PHP library for reading and writing
|
||||||
|
* word processing documents.
|
||||||
|
*
|
||||||
|
* PHPWord is free software distributed under the terms of the GNU Lesser
|
||||||
|
* General Public License version 3 as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please read the LICENSE
|
||||||
|
* file that was distributed with this source code. For the full list of
|
||||||
|
* contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
|
||||||
|
*
|
||||||
|
* @link https://github.com/PHPOffice/PHPWord
|
||||||
|
* @copyright 2010-2014 PHPWord contributors
|
||||||
|
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace PhpOffice\PhpWord\Writer\Word2007\Part;
|
||||||
|
|
||||||
|
use PhpOffice\PhpWord\Shared\XMLWriter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Word2007 document relationship writer
|
||||||
|
*
|
||||||
|
* @since 0.11.0
|
||||||
|
*/
|
||||||
|
class RelsDocument extends Rels
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Write _rels/.rels
|
||||||
|
*/
|
||||||
|
public function write()
|
||||||
|
{
|
||||||
|
$xmlRels = array(
|
||||||
|
'styles.xml' => 'officeDocument/2006/relationships/styles',
|
||||||
|
'numbering.xml' => 'officeDocument/2006/relationships/numbering',
|
||||||
|
'settings.xml' => 'officeDocument/2006/relationships/settings',
|
||||||
|
'theme/theme1.xml' => 'officeDocument/2006/relationships/theme',
|
||||||
|
'webSettings.xml' => 'officeDocument/2006/relationships/webSettings',
|
||||||
|
'fontTable.xml' => 'officeDocument/2006/relationships/fontTable',
|
||||||
|
);
|
||||||
|
$xmlWriter = $this->getXmlWriter();
|
||||||
|
$this->writeRels($xmlWriter, $xmlRels, $this->parentWriter->getRelationships());
|
||||||
|
|
||||||
|
return $xmlWriter->getData();
|
||||||
|
}
|
||||||
|
}
|
||||||
44
src/PhpWord/Writer/Word2007/Part/RelsMain.php
Normal file
44
src/PhpWord/Writer/Word2007/Part/RelsMain.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is part of PHPWord - A pure PHP library for reading and writing
|
||||||
|
* word processing documents.
|
||||||
|
*
|
||||||
|
* PHPWord is free software distributed under the terms of the GNU Lesser
|
||||||
|
* General Public License version 3 as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please read the LICENSE
|
||||||
|
* file that was distributed with this source code. For the full list of
|
||||||
|
* contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
|
||||||
|
*
|
||||||
|
* @link https://github.com/PHPOffice/PHPWord
|
||||||
|
* @copyright 2010-2014 PHPWord contributors
|
||||||
|
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace PhpOffice\PhpWord\Writer\Word2007\Part;
|
||||||
|
|
||||||
|
use PhpOffice\PhpWord\Shared\XMLWriter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Word2007 main relationship writer
|
||||||
|
*
|
||||||
|
* @since 0.11.0
|
||||||
|
*/
|
||||||
|
class RelsMain extends Rels
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Write _rels/.rels
|
||||||
|
*/
|
||||||
|
public function write()
|
||||||
|
{
|
||||||
|
$xmlRels = array(
|
||||||
|
'docProps/core.xml' => 'package/2006/relationships/metadata/core-properties',
|
||||||
|
'docProps/app.xml' => 'officeDocument/2006/relationships/extended-properties',
|
||||||
|
'word/document.xml' => 'officeDocument/2006/relationships/officeDocument',
|
||||||
|
);
|
||||||
|
$xmlWriter = $this->getXmlWriter();
|
||||||
|
$this->writeRels($xmlWriter, $xmlRels);
|
||||||
|
|
||||||
|
return $xmlWriter->getData();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -25,7 +25,7 @@ class Settings extends AbstractPart
|
|||||||
/**
|
/**
|
||||||
* Write word/settings.xml
|
* Write word/settings.xml
|
||||||
*/
|
*/
|
||||||
public function writeSettings()
|
public function write()
|
||||||
{
|
{
|
||||||
$settings = array(
|
$settings = array(
|
||||||
'w:zoom' => array('@attributes' => array('w:percent' => '100')),
|
'w:zoom' => array('@attributes' => array('w:percent' => '100')),
|
||||||
@ -136,4 +136,15 @@ class Settings extends AbstractPart
|
|||||||
$xmlWriter->endElement();
|
$xmlWriter->endElement();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write word/settings.xml
|
||||||
|
*
|
||||||
|
* @deprecated 0.11.0
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function writeSettings()
|
||||||
|
{
|
||||||
|
return $this->write();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,12 +38,13 @@ class Styles extends AbstractPart
|
|||||||
/**
|
/**
|
||||||
* Write word/styles.xml
|
* Write word/styles.xml
|
||||||
*
|
*
|
||||||
* @param \PhpOffice\PhpWord\PhpWord $phpWord
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function writeStyles(PhpWord $phpWord = null)
|
public function write()
|
||||||
{
|
{
|
||||||
|
$phpWord = $this->parentWriter->getPhpWord();
|
||||||
if (is_null($phpWord)) {
|
if (is_null($phpWord)) {
|
||||||
throw new Exception("No PhpWord assigned.");
|
throw new Exception('No PhpWord assigned.');
|
||||||
}
|
}
|
||||||
$xmlWriter = $this->getXmlWriter();
|
$xmlWriter = $this->getXmlWriter();
|
||||||
|
|
||||||
@ -219,4 +220,17 @@ class Styles extends AbstractPart
|
|||||||
$xmlWriter->endElement(); // w:style
|
$xmlWriter->endElement(); // w:style
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write word/styles.xml
|
||||||
|
*
|
||||||
|
* @param \PhpOffice\PhpWord\PhpWord $phpWord
|
||||||
|
* @deprecated 0.11.0
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function writeStyles(PhpWord $phpWord = null)
|
||||||
|
{
|
||||||
|
$this->parentWriter->setPhpWord($phpWord);
|
||||||
|
return $this->write();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,7 +25,7 @@ class WebSettings extends Settings
|
|||||||
/**
|
/**
|
||||||
* Write word/webSettings.xml
|
* Write word/webSettings.xml
|
||||||
*/
|
*/
|
||||||
public function writeWebSettings()
|
public function write()
|
||||||
{
|
{
|
||||||
$settings = array(
|
$settings = array(
|
||||||
'w:optimizeForBrowser' => '',
|
'w:optimizeForBrowser' => '',
|
||||||
@ -46,4 +46,15 @@ class WebSettings extends Settings
|
|||||||
|
|
||||||
return $xmlWriter->getData();
|
return $xmlWriter->getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write word/webSettings.xml
|
||||||
|
*
|
||||||
|
* @deprecated 0.11.0
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function writeWebSettings()
|
||||||
|
{
|
||||||
|
return $this->write();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user