Cols Number

Feb 18, 2012 at 4:51 PM

I did nead a parameter for cols on a page, split a page in 2 cols. With thanks to jillelain (see discussion Height header) I managed to add some code. I publish it here, maybe somebody need it or it can be added to a next release PHPWord.

Settings php:

	private $_colsNum;
	private $_colsSpace;
In construct:
	$this->_colsNum = 1;
	$this->_colsSpace = 720;
Add functions:
	public function getColsNum() {
		return $this->_colsNum;
	}
	public function setColsNum($pValue = '') {
		$this->_colsNum = $pValue;
		return $this;
	}
	public function getColsSpace() {
		return $this->_colsSpace;
	}
	public function setColsSpace($pValue = '') {
		$this->_colsSpace = $pValue;
		return $this;
	}
In document.php
In _writeEndSection:
	$colsNum = $_settings->getColsNum(); 
	$colsSpace = $_settings->getColsSpace();

$objWriter->startElement('w:cols'); 
// add ability to add more than one column and adjuist space 
if($colsNum > 1){ 
  $objWriter->writeAttribute('w:num', $colsNum); 
}
$objWriter->writeAttribute('w:space', $colsSpace); 
//$objWriter->writeAttribute('w:space', '720');
Good luck
Feb 18, 2012 at 6:30 PM

Great! Good for you!

Jul 5, 2012 at 4:39 PM

how to add column with those code? any example?

Jul 5, 2012 at 5:23 PM

ahh found it

just create section with an array parameter

$section = $this->phpword->createSection(
	array(
		'_colsNum'	=> 2
	)
);
i used it in codeigniter and works! :D

Jul 27, 2012 at 5:45 AM
Edited Jul 30, 2012 at 5:52 AM

Works!

thank you.

NB: should be

'colsNum'	=> 2



I include your code and the code of johnnyhogenbirk:
http://phpword.codeplex.com/discussions/316726

into my code.
For people interested:

PHPWord/Section/Settings.php:

<?php
/**
 * PHPWord
 *
 * Copyright (c) 2011 PHPWord
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @category   PHPWord
 * @package    PHPWord
 * @copyright  Copyright (c) 010 PHPWord
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
 * @version    Beta 0.6.3, 08.07.2011
 */


/**
 * PHPWord_Section_Settings
 *
 * @category   PHPWord
 * @package    PHPWord_Section
 * @copyright  Copyright (c) 2011 PHPWord
 */
class PHPWord_Section_Settings {
   
    /**
     * Default Page Size Width
     *
     * @var int
     */
    private $_defaultPageSizeW = 11906;
   
    /**
     * Default Page Size Height
     *
     * @var int
     */
    private $_defaultPageSizeH = 16838;
   
    /**
     * Page Orientation
     *
     * @var string
     */
    private $_orientation;
   
    /**
     * Page Margin Top
     *
     * @var int
     */
    private $_marginTop;
   
    /**
     * Page Margin Left
     *
     * @var int
     */
    private $_marginLeft;
   
    /**
     * Page Margin Right
     *
     * @var int
     */
    private $_marginRight;
   
    /**
     * Page Margin Bottom
     *
     * @var int
     */
    private $_marginBottom;
   
    /**
     * Page Size Width
     *
     * @var int
     */
    private $_pageSizeW;
   
    /**
     * Page Size Height
     *
     * @var int
     */
    private $_pageSizeH;

    /**
     * Page Border Top Size
     *
     * @var int
     */
    private $_borderTopSize;

    /**
     * Page Border Top Color
     *
     * @var int
     */
    private $_borderTopColor;

    /**
     * Page Border Left Size
     *
     * @var int
     */
    private $_borderLeftSize;

    /**
     * Page Border Left Color
     *
     * @var int
     */
    private $_borderLeftColor;

    /**
     * Page Border Right Size
     *
     * @var int
     */
    private $_borderRightSize;

    /**
     * Page Border Right Color
     *
     * @var int
     */
    private $_borderRightColor;

    /**
     * Page Border Bottom Size
     *
     * @var int
     */
    private $_borderBottomSize;

    /**
     * Page Border Bottom Color
     *
     * @var int
     */
    private $_borderBottomColor;

    // Yoong Kim 27/07/2012: start add header and footer height + columns per section
    /**
     * Header height
     *
     * @var int
     */
    private $_headerHeight;
    /**
     * Footer height
     *
     * @var int
     */
    private $_footerHeight;
    /**
     * Number of columns per section
     *
     * @var int
     */
    private $_colsNum;
    /**
     * Default width for a column
     *
     * @var int
     */
    private $_colsSpace;
    // Yoong Kim 27/07/2012: end add header and footer height + columns per section
   
    /**
     * Create new Section Settings
     */
    public function __construct() {
        $this->_orientation = null;
        $this->_marginTop = 1418;
        $this->_marginLeft = 1418;
        $this->_marginRight    = 1418;
        $this->_marginBottom = 1134;
        $this->_pageSizeW = $this->_defaultPageSizeW;
        $this->_pageSizeH = $this->_defaultPageSizeH;
        $this->_borderTopSize = null;
        $this->_borderTopColor = null;
        $this->_borderLeftSize = null;
        $this->_borderLeftColor = null;
        $this->_borderRightSize = null;
        $this->_borderRightColor = null;
        $this->_borderBottomSize = null;
        $this->_borderBottomColor = null;
        // Yoong Kim 27/07/2012: start add header and footer height + columns per section
        $this->_headerHeight = 720; // set default header and footer to 720 twips (.5 inches)
        $this->_footerHeight = 720; // set default header and footer to 720 twips (.5 inches)
        $this->_colsNum = 1;
        $this->_colsSpace = 720;
        // Yoong Kim 27/07/2012: end add header and footer height + columns per section
    }
   
    /**
     * Set Setting Value
     *
     * @param string $key
     * @param string $value
     */
    public function setSettingValue($key, $value) {
        if($key == '_orientation' && $value == 'landscape') {
            $this->setLandscape();
        } elseif($key == '_orientation' && is_null($value)) {
            $this->setPortrait();
        } elseif($key == '_borderSize') {
            $this->setBorderSize($value);
        } elseif($key == '_borderColor') {
            $this->setBorderColor($value);
        } else {
            $this->$key = $value;
        }
    }
   
    /**
     * Get Margin Top
     *
     * @return int
     */
    public function getMarginTop() {
        return $this->_marginTop;
    }

    /**
     * Set Margin Top
     *
     * @param int $pValue
     */
    public function setMarginTop($pValue = '') {
        $this->_marginTop = $pValue;
        return $this;
    }

    /**
     * Get Margin Left
     *
     * @return int
     */
    public function getMarginLeft() {
        return $this->_marginLeft;
    }

    /**
     * Set Margin Left
     *
     * @param int $pValue
     */
    public function setMarginLeft($pValue = '') {
        $this->_marginLeft = $pValue;
        return $this;
    }

    /**
     * Get Margin Right
     *
     * @return int
     */
    public function getMarginRight() {
        return $this->_marginRight;
    }

    /**
     * Set Margin Right
     *
     * @param int $pValue
     */
    public function setMarginRight($pValue = '') {
        $this->_marginRight = $pValue;
        return $this;
    }

    /**
     * Get Margin Bottom
     *
     * @return int
     */
    public function getMarginBottom() {
        return $this->_marginBottom;
    }

    /**
     * Set Margin Bottom
     *
     * @param int $pValue
     */
    public function setMarginBottom($pValue = '') {
        $this->_marginBottom = $pValue;
        return $this;
    }
   
    /**
     * Set Landscape Orientation
     */
    public function setLandscape() {
        $this->_orientation = 'landscape';
        $this->_pageSizeW = $this->_defaultPageSizeH;
        $this->_pageSizeH = $this->_defaultPageSizeW;
    }
   
    /**
     * Set Portrait Orientation
     */
    public function setPortrait() {
        $this->_orientation = null;
        $this->_pageSizeW = $this->_defaultPageSizeW;
        $this->_pageSizeH = $this->_defaultPageSizeH;
    }
   
    /**
     * Get Page Size Width
     *
     * @return int
     */
    public function getPageSizeW() {
        return $this->_pageSizeW;
    }
   
    /**
     * Get Page Size Height
     *
     * @return int
     */
    public function getPageSizeH() {
        return $this->_pageSizeH;
    }
   
    /**
     * Get Page Orientation
     *
     * @return string
     */
    public function getOrientation() {
        return $this->_orientation;
    }
   
    /**
     * Set Border Size
     *
     * @param int $pValue
     */
    public function setBorderSize($pValue = null) {
        $this->_borderTopSize = $pValue;
        $this->_borderLeftSize = $pValue;
        $this->_borderRightSize = $pValue;
        $this->_borderBottomSize = $pValue;
    }
   
    /**
     * Get Border Size
     *
     * @return array
     */
    public function getBorderSize() {
        $t = $this->getBorderTopSize();
        $l = $this->getBorderLeftSize();
        $r = $this->getBorderRightSize();
        $b = $this->getBorderBottomSize();
       
        return array($t, $l, $r, $b);
    }
   
    /**
     * Set Border Color
     *
     * @param string $pValue
     */
    public function setBorderColor($pValue = null) {
        $this->_borderTopColor = $pValue;
        $this->_borderLeftColor = $pValue;
        $this->_borderRightColor = $pValue;
        $this->_borderBottomColor = $pValue;
    }
   
    /**
     * Get Border Color
     *
     * @return array
     */
    public function getBorderColor() {
        $t = $this->getBorderTopColor();
        $l = $this->getBorderLeftColor();
        $r = $this->getBorderRightColor();
        $b = $this->getBorderBottomColor();
       
        return array($t, $l, $r, $b);
    }
   
    /**
     * Set Border Top Size
     *
     * @param int $pValue
     */
    public function setBorderTopSize($pValue = null) {
        $this->_borderTopSize = $pValue;
    }
   
    /**
     * Get Border Top Size
     *
     * @return int
     */
    public function getBorderTopSize() {
        return $this->_borderTopSize;
    }
   
    /**
     * Set Border Top Color
     *
     * @param string $pValue
     */
    public function setBorderTopColor($pValue = null) {
        $this->_borderTopColor = $pValue;
    }
   
    /**
     * Get Border Top Color
     *
     * @return string
     */
    public function getBorderTopColor() {
        return $this->_borderTopColor;
    }
   
    /**
     * Set Border Left Size
     *
     * @param int $pValue
     */
    public function setBorderLeftSize($pValue = null) {
        $this->_borderLeftSize = $pValue;
    }
   
    /**
     * Get Border Left Size
     *
     * @return int
     */
    public function getBorderLeftSize() {
        return $this->_borderLeftSize;
    }
   
    /**
     * Set Border Left Color
     *
     * @param string $pValue
     */
    public function setBorderLeftColor($pValue = null) {
        $this->_borderLeftColor = $pValue;
    }
   
    /**
     * Get Border Left Color
     *
     * @return string
     */
    public function getBorderLeftColor() {
        return $this->_borderLeftColor;
    }
   
    /**
     * Set Border Right Size
     *
     * @param int $pValue
     */
    public function setBorderRightSize($pValue = null) {
        $this->_borderRightSize = $pValue;
    }
   
    /**
     * Get Border Right Size
     *
     * @return int
     */
    public function getBorderRightSize() {
        return $this->_borderRightSize;
    }
   
    /**
     * Set Border Right Color
     *
     * @param string $pValue
     */
    public function setBorderRightColor($pValue = null) {
        $this->_borderRightColor = $pValue;
    }
   
    /**
     * Get Border Right Color
     *
     * @return string
     */
    public function getBorderRightColor() {
        return $this->_borderRightColor;
    }
   
    /**
     * Set Border Bottom Size
     *
     * @param int $pValue
     */
    public function setBorderBottomSize($pValue = null) {
        $this->_borderBottomSize = $pValue;
    }
   
    /**
     * Get Border Bottom Size
     *
     * @return int
     */
    public function getBorderBottomSize() {
        return $this->_borderBottomSize;
    }
   
    /**
     * Set Border Bottom Color
     *
     * @param string $pValue
     */
    public function setBorderBottomColor($pValue = null) {
        $this->_borderBottomColor = $pValue;
    }
   
    /**
     * Get Border Bottom Color
     *
     * @return string
     */
    public function getBorderBottomColor() {
        return $this->_borderBottomColor;
    }
   
    // Yoong Kim 27/07/2012: start add header and footer height + columns per section
    /**
     * Get Header Height
     *
     * @return int
     */
    public function getHeaderHeight() {
        return $this->_headerHeight;
    }
   
    /**
     * Set Header Height
     *
     * @param int $pValue
     */
    public function setHeaderHeight($pValue = '') {
        $this->_headerHeight = $pValue;
        return $this;
    }
   
    /**
     * Get Footer Height
     *
     * @return int
     */
    public function getFooterHeight() {
        return $this->_footerHeight;
    }
   
    /**
     * Set Footer Height
     *
     * @param int $pValue
     */
    public function setFooterHeight($pValue = '') {
        $this->_footerHeight = $pValue;
        return $this;
    }
   
    /**
     * Get number of columns per section
     *
     * @param int $pValue
     */
    public function getColsNum() {
        return $this->_colsNum;
    }
    /**
     * Set number of columns per section
     *
     * @param int $pValue
     */
    public function setColsNum($pValue = '') {
        $this->_colsNum = $pValue;
        return $this;
    }
   
    /**
     * Get column width for a section
     *
     * @param int $pValue
     */
    public function getColsSpace() {
        return $this->_colsSpace;
    }
    /**
     * Set column width for a section
     *
     * @param int $pValue
     */
    public function setColsSpace($pValue = '') {
        $this->_colsSpace = $pValue;
        return $this;
    }
    // Yoong Kim 27/07/2012: end add header and footer height + columns per section
}
?>

PHPWord/Writer/Word2007/Document.php:
<?php
/**
 * PHPWord
 *
 * Copyright (c) 2011 PHPWord
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @category   PHPWord
 * @package    PHPWord
 * @copyright  Copyright (c) 010 PHPWord
 * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
 * @version    Beta 0.6.3, 08.07.2011
 */


class PHPWord_Writer_Word2007_Document extends PHPWord_Writer_Word2007_Base {
   
    public function writeDocument(PHPWord $pPHPWord = null) {
        // Create XML writer
       
        if($this->getParentWriter()->getUseDiskCaching()) {
            $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
        } else {
            $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY);
        }
       
        // XML header
        $objWriter->startDocument('1.0','UTF-8','yes');
       
        // w:document
        $objWriter->startElement('w:document');
       
        $objWriter->writeAttribute('xmlns:ve', 'http://schemas.openxmlformats.org/markup-compatibility/2006');
        $objWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office');
        $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
        $objWriter->writeAttribute('xmlns:m', 'http://schemas.openxmlformats.org/officeDocument/2006/math');
        $objWriter->writeAttribute('xmlns:v', 'urn:schemas-microsoft-com:vml');
        $objWriter->writeAttribute('xmlns:wp', 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing');
        $objWriter->writeAttribute('xmlns:w10', 'urn:schemas-microsoft-com:office:word');
        $objWriter->writeAttribute('xmlns:w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main');
        $objWriter->writeAttribute('xmlns:wne', 'http://schemas.microsoft.com/office/word/2006/wordml');
       
        $objWriter->startElement('w:body');
       
        $_sections = $pPHPWord->getSections();
        $countSections = count($_sections);
        $pSection = 0;
       
        if($countSections > 0) {
            foreach($_sections as $section) {
                $pSection++;
               
                $_elements = $section->getElements();
               
                foreach($_elements as $element) {
                    if($element instanceof PHPWord_Section_Text) {
                        $this->_writeText($objWriter, $element);
                    } elseif($element instanceof PHPWord_Section_TextRun) {
                        $this->_writeTextRun($objWriter, $element);
                    } elseif($element instanceof PHPWord_Section_Link) {
                        $this->_writeLink($objWriter, $element);
                    } elseif($element instanceof PHPWord_Section_Title) {
                        $this->_writeTitle($objWriter, $element);
                    } elseif($element instanceof PHPWord_Section_TextBreak) {
                        $this->_writeTextBreak($objWriter);
                    } elseif($element instanceof PHPWord_Section_PageBreak) {
                        $this->_writePageBreak($objWriter);
                    } elseif($element instanceof PHPWord_Section_Table) {
                        $this->_writeTable($objWriter, $element);
                    } elseif($element instanceof PHPWord_Section_ListItem) {
                        $this->_writeListItem($objWriter, $element);
                    } elseif($element instanceof PHPWord_Section_Image ||
                             $element instanceof PHPWord_Section_MemoryImage) {
                        $this->_writeImage($objWriter, $element);
                    } elseif($element instanceof PHPWord_Section_Object) {
                        $this->_writeObject($objWriter, $element);
                    } elseif($element instanceof PHPWord_TOC) {
                        $this->_writeTOC($objWriter);
                    }
                }
               
                if($pSection == $countSections) {
                    $this->_writeEndSection($objWriter, $section);
                } else {
                    $this->_writeSection($objWriter, $section);
                }
            }
        }
       
        $objWriter->endElement(); // End w:body
        $objWriter->endElement(); // End w:document

        // Return
        return $objWriter->getData();
    }
   
    private function _writeSection(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section $section) {
        $objWriter->startElement('w:p');
            $objWriter->startElement('w:pPr');
                $this->_writeEndSection($objWriter, $section, 3);
            $objWriter->endElement();
        $objWriter->endElement();
    }
   
    private function _writeEndSection(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section $section) {
        $_settings = $section->getSettings();
        $_header = $section->getHeader();
        $_footer = $section->getFooter();
        $pgSzW = $_settings->getPageSizeW();
        $pgSzH = $_settings->getPageSizeH();
        $orientation = $_settings->getOrientation();
       
        $marginTop = $_settings->getMarginTop();
        $marginLeft = $_settings->getMarginLeft();
        $marginRight = $_settings->getMarginRight();
        $marginBottom = $_settings->getMarginBottom();
       
        $borders = $_settings->getBorderSize();
       
        // Yoong Kim 27/07/2012: start add header and footer height + columns per section
        $headerHeight = $_settings->getHeaderHeight();
        $footerHeight = $_settings->getFooterHeight();
        $colsNum = $_settings->getColsNum();
        $colsSpace = $_settings->getColsSpace();
        // Yoong Kim 27/07/2012: end add header and footer height + columns per section
       
        $objWriter->startElement('w:sectPr');
           
            if(!is_null($_header)) {
                $rId = $_header->getRelationId();
                $objWriter->startElement('w:headerReference');
                    $objWriter->writeAttribute('w:type', 'default');
                    $objWriter->writeAttribute('r:id', 'rId'.$rId);
                $objWriter->endElement();
            }
           
            if(!is_null($_footer)) {
                $rId = $_footer->getRelationId();
                $objWriter->startElement('w:footerReference');
                    $objWriter->writeAttribute('w:type', 'default');
                    $objWriter->writeAttribute('r:id', 'rId'.$rId);
                $objWriter->endElement();
            }
           
            $objWriter->startElement('w:pgSz');
                $objWriter->writeAttribute('w:w', $pgSzW);
                $objWriter->writeAttribute('w:h', $pgSzH);
               
                if(!is_null($orientation) && strtolower($orientation) != 'portrait') {
                    $objWriter->writeAttribute('w:orient', $orientation);
                }
               
            $objWriter->endElement();
           
            $objWriter->startElement('w:pgMar');
                $objWriter->writeAttribute('w:top', $marginTop);
                $objWriter->writeAttribute('w:right', $marginRight);
                $objWriter->writeAttribute('w:bottom', $marginBottom);
                $objWriter->writeAttribute('w:left', $marginLeft);
                // Yoong Kim 27/07/2012: start add header and footer height
                $objWriter->writeAttribute('w:header', $headerHeight);
                $objWriter->writeAttribute('w:footer', $footerHeight);
                // Yoong Kim 27/07/2012: end add header and footer height
                $objWriter->writeAttribute('w:gutter', '0');
            $objWriter->endElement();
           
           
            if(!is_null($borders[0]) || !is_null($borders[1]) || !is_null($borders[2]) || !is_null($borders[3])) {
                $borderColor = $_settings->getBorderColor();
               
                $objWriter->startElement('w:pgBorders');
                    $objWriter->writeAttribute('w:offsetFrom', 'page');
                   
                    if(!is_null($borders[0])) {
                        $objWriter->startElement('w:top');
                            $objWriter->writeAttribute('w:val', 'single');
                            $objWriter->writeAttribute('w:sz', $borders[0]);
                            $objWriter->writeAttribute('w:space', '24');
                            $objWriter->writeAttribute('w:color', $borderColor[0]);
                        $objWriter->endElement();
                    }
                   
                    if(!is_null($borders[1])) {
                        $objWriter->startElement('w:left');
                            $objWriter->writeAttribute('w:val', 'single');
                            $objWriter->writeAttribute('w:sz', $borders[1]);
                            $objWriter->writeAttribute('w:space', '24');
                            $objWriter->writeAttribute('w:color', $borderColor[1]);
                        $objWriter->endElement();
                    }
                   
                    if(!is_null($borders[2])) {
                        $objWriter->startElement('w:right');
                            $objWriter->writeAttribute('w:val', 'single');
                            $objWriter->writeAttribute('w:sz', $borders[2]);
                            $objWriter->writeAttribute('w:space', '24');
                            $objWriter->writeAttribute('w:color', $borderColor[2]);
                        $objWriter->endElement();
                    }
                   
                    if(!is_null($borders[3])) {
                        $objWriter->startElement('w:bottom');
                            $objWriter->writeAttribute('w:val', 'single');
                            $objWriter->writeAttribute('w:sz', $borders[3]);
                            $objWriter->writeAttribute('w:space', '24');
                            $objWriter->writeAttribute('w:color', $borderColor[3]);
                        $objWriter->endElement();
                    }
                $objWriter->endElement();
            }

           
            $objWriter->startElement('w:cols');
            // Yoong Kim 27/07/2012: start add columns per section
            if($colsNum > 1){
                $objWriter->writeAttribute('w:num', $colsNum);
            }
            $objWriter->writeAttribute('w:space', $colsSpace);
                //$objWriter->writeAttribute('w:space', '720');
            // Yoong Kim 27/07/2012: start end columns per section
            $objWriter->endElement();
           
           
        $objWriter->endElement();
    }
   
    private function _writePageBreak(PHPWord_Shared_XMLWriter $objWriter = null) {
        $objWriter->startElement('w:p');
            $objWriter->startElement('w:r');
                $objWriter->startElement('w:br');
                    $objWriter->writeAttribute('w:type', 'page');
                $objWriter->endElement();
            $objWriter->endElement();
        $objWriter->endElement();
    }
   
    private function _writeListItem(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_ListItem $listItem) {
        $textObject = $listItem->getTextObject();
        $text = $textObject->getText();
        $styleParagraph = $textObject->getParagraphStyle();
        $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
       
        $depth = $listItem->getDepth();
        $listType = $listItem->getStyle()->getListType();
       
        $objWriter->startElement('w:p');
            $objWriter->startElement('w:pPr');
           
                if($SpIsObject) {
                    $this->_writeParagraphStyle($objWriter, $styleParagraph, true);
                } elseif(!$SpIsObject && !is_null($styleParagraph)) {
                    $objWriter->startElement('w:pStyle');
                        $objWriter->writeAttribute('w:val', $styleParagraph);
                    $objWriter->endElement();
                }
           
                $objWriter->startElement('w:numPr');
               
                    $objWriter->startElement('w:ilvl');
                        $objWriter->writeAttribute('w:val', $depth);
                    $objWriter->endElement();
                   
                    $objWriter->startElement('w:numId');
                        $objWriter->writeAttribute('w:val', $listType);
                    $objWriter->endElement();
                   
                $objWriter->endElement();
            $objWriter->endElement();
           
            $this->_writeText($objWriter, $textObject, true);
           
        $objWriter->endElement();
    }
   
    protected function _writeObject(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Object $object) {
        $rIdObject = $object->getRelationId();
        $rIdImage = $object->getImageRelationId();
        $shapeId = md5($rIdObject.'_'.$rIdImage);
       
        $objectId = $object->getObjectId();
       
        $style = $object->getStyle();
        $width = $style->getWidth();
        $height = $style->getHeight();
        $align = $style->getAlign();
       
       
        $objWriter->startElement('w:p');
       
            if(!is_null($align)) {
                $objWriter->startElement('w:pPr');
                    $objWriter->startElement('w:jc');
                        $objWriter->writeAttribute('w:val', $align);
                    $objWriter->endElement();
                $objWriter->endElement();
            }
       
            $objWriter->startElement('w:r');
           
                $objWriter->startElement('w:object');
                $objWriter->writeAttribute('w:dxaOrig', '249');
                $objWriter->writeAttribute('w:dyaOrig', '160');
               
                    $objWriter->startElement('v:shape');
                    $objWriter->writeAttribute('id', $shapeId);
                    $objWriter->writeAttribute('type', '#_x0000_t75');
                    $objWriter->writeAttribute('style', 'width:104px;height:67px');
                    $objWriter->writeAttribute('o:ole', '');
                   
                        $objWriter->startElement('v:imagedata');
                        $objWriter->writeAttribute('r:id', 'rId'.$rIdImage);
                        $objWriter->writeAttribute('o:title', '');
                        $objWriter->endElement();
                       
                    $objWriter->endElement();
                   
                    $objWriter->startElement('o:OLEObject');
                    $objWriter->writeAttribute('Type', 'Embed');
                    $objWriter->writeAttribute('ProgID', 'Package');
                    $objWriter->writeAttribute('ShapeID', $shapeId);
                    $objWriter->writeAttribute('DrawAspect', 'Icon');
                    $objWriter->writeAttribute('ObjectID', '_'.$objectId);
                    $objWriter->writeAttribute('r:id', 'rId'.$rIdObject);
                    $objWriter->endElement();
                   
                $objWriter->endElement();
           
            $objWriter->endElement(); // w:r
           
        $objWriter->endElement(); // w:p
    }
   
    private function _writeTOC(PHPWord_Shared_XMLWriter $objWriter = null) {
        $titles = PHPWord_TOC::getTitles();
        $styleFont = PHPWord_TOC::getStyleFont();
       
        $styleTOC = PHPWord_TOC::getStyleTOC();
        $fIndent = $styleTOC->getIndent();
        $tabLeader = $styleTOC->getTabLeader();
        $tabPos = $styleTOC->getTabPos();
       
        $isObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;
       
        for($i=0; $i<count($titles); $i++) {
            $title = $titles[$i];
            $indent = ($title['depth'] - 1) * $fIndent;
           
            $objWriter->startElement('w:p');
           
                $objWriter->startElement('w:pPr');
                   
                    if($isObject && !is_null($styleFont->getParagraphStyle())) {
                        $this->_writeParagraphStyle($objWriter, $styleFont->getParagraphStyle());
                    }
                   
                    if($indent > 0) {
                        $objWriter->startElement('w:ind');
                            $objWriter->writeAttribute('w:left', $indent);
                        $objWriter->endElement();
                    }
                   
                    if(!empty($styleFont) && !$isObject) {
                        $objWriter->startElement('w:pPr');
                            $objWriter->startElement('w:pStyle');
                                $objWriter->writeAttribute('w:val', $styleFont);
                            $objWriter->endElement();
                        $objWriter->endElement();
                    }
                   
                    $objWriter->startElement('w:tabs');
                        $objWriter->startElement('w:tab');
                            $objWriter->writeAttribute('w:val', 'right');
                            if(!empty($tabLeader)) {
                                $objWriter->writeAttribute('w:leader', $tabLeader);
                            }
                            $objWriter->writeAttribute('w:pos', $tabPos);
                        $objWriter->endElement();
                    $objWriter->endElement();
               
                $objWriter->endElement(); // w:pPr
               
               
                if($i == 0) {
                    $objWriter->startElement('w:r');
                        $objWriter->startElement('w:fldChar');
                            $objWriter->writeAttribute('w:fldCharType', 'begin');
                        $objWriter->endElement();
                    $objWriter->endElement();
                   
                    $objWriter->startElement('w:r');
                        $objWriter->startElement('w:instrText');
                            $objWriter->writeAttribute('xml:space', 'preserve');
                            $objWriter->writeRaw('TOC \o "1-9" \h \z \u');
                        $objWriter->endElement();
                    $objWriter->endElement();
                   
                    $objWriter->startElement('w:r');
                        $objWriter->startElement('w:fldChar');
                            $objWriter->writeAttribute('w:fldCharType', 'separate');
                        $objWriter->endElement();
                    $objWriter->endElement();
                }
               
                $objWriter->startElement('w:hyperlink');
                    $objWriter->writeAttribute('w:anchor', $title['anchor']);
                    $objWriter->writeAttribute('w:history', '1');
                   
                    $objWriter->startElement('w:r');
                   
                        if($isObject) {
                            $this->_writeTextStyle($objWriter, $styleFont);
                        }
                       
                        $objWriter->startElement('w:t');
                            $objWriter->writeRaw($title['text']);
                        $objWriter->endElement();
                    $objWriter->endElement();
                   
                    $objWriter->startElement('w:r');
                        $objWriter->writeElement('w:tab', null);
                    $objWriter->endElement();
                   
                    $objWriter->startElement('w:r');
                        $objWriter->startElement('w:fldChar');
                            $objWriter->writeAttribute('w:fldCharType', 'begin');
                        $objWriter->endElement();
                    $objWriter->endElement();
                   
                    $objWriter->startElement('w:r');
                        $objWriter->startElement('w:instrText');
                            $objWriter->writeAttribute('xml:space', 'preserve');
                            $objWriter->writeRaw('PAGEREF '.$title['anchor'].' \h');
                        $objWriter->endElement();
                    $objWriter->endElement();
                   
                    $objWriter->startElement('w:r');
                        $objWriter->startElement('w:fldChar');
                            $objWriter->writeAttribute('w:fldCharType', 'end');
                        $objWriter->endElement();
                    $objWriter->endElement();
                   
                $objWriter->endElement(); // w:hyperlink
           
            $objWriter->endElement(); // w:p
        }
       
        $objWriter->startElement('w:p');
            $objWriter->startElement('w:r');
                $objWriter->startElement('w:fldChar');
                    $objWriter->writeAttribute('w:fldCharType', 'end');
                $objWriter->endElement();
            $objWriter->endElement();
        $objWriter->endElement();
    }
}

For use:
$PHPWord->createSection(array('orientation' => 'landscape', // null=portrait
                'marginLeft' => 2000,
                'marginRight' => 1000,
                'marginTop' => 2000,
                'marginBottom' => 1000,
                'footerHeight' => 600,
                'headerHeight' => 500)

, array('colsNum'    => 2));