Overview

Packages

  • PHP
  • PHPWord

Classes

  • PHPWord
  • PHPWord_Autoloader
  • PHPWord_DocumentProperties
  • PHPWord_HashTable
  • PHPWord_IOFactory
  • PHPWord_Media
  • PHPWord_Section
  • PHPWord_Section_Footer
  • PHPWord_Section_Footer_PreserveText
  • PHPWord_Section_Header
  • PHPWord_Section_Image
  • PHPWord_Section_Link
  • PHPWord_Section_ListItem
  • PHPWord_Section_MemoryImage
  • PHPWord_Section_Object
  • PHPWord_Section_PageBreak
  • PHPWord_Section_Settings
  • PHPWord_Section_Table
  • PHPWord_Section_Table_Cell
  • PHPWord_Section_Table_Row
  • PHPWord_Section_Text
  • PHPWord_Section_TextBreak
  • PHPWord_Section_TextRun
  • PHPWord_Section_Title
  • PHPWord_Shared_Drawing
  • PHPWord_Shared_File
  • PHPWord_Shared_Font
  • PHPWord_Shared_String
  • PHPWord_Shared_XMLWriter
  • PHPWord_Shared_ZipStreamWrapper
  • PHPWord_Style
  • PHPWord_Style_Cell
  • PHPWord_Style_Font
  • PHPWord_Style_Image
  • PHPWord_Style_ListItem
  • PHPWord_Style_Paragraph
  • PHPWord_Style_Row
  • PHPWord_Style_Tab
  • PHPWord_Style_Table
  • PHPWord_Style_TableFull
  • PHPWord_Style_Tabs
  • PHPWord_Style_TOC
  • PHPWord_Template
  • PHPWord_TOC
  • PHPWord_Writer_ODText
  • PHPWord_Writer_ODText_Content
  • PHPWord_Writer_ODText_Manifest
  • PHPWord_Writer_ODText_Meta
  • PHPWord_Writer_ODText_Mimetype
  • PHPWord_Writer_ODText_Styles
  • PHPWord_Writer_ODText_WriterPart
  • PHPWord_Writer_RTF
  • PHPWord_Writer_Word2007
  • PHPWord_Writer_Word2007_Base
  • PHPWord_Writer_Word2007_ContentTypes
  • PHPWord_Writer_Word2007_DocProps
  • PHPWord_Writer_Word2007_Document
  • PHPWord_Writer_Word2007_DocumentRels
  • PHPWord_Writer_Word2007_Footer
  • PHPWord_Writer_Word2007_Header
  • PHPWord_Writer_Word2007_Rels
  • PHPWord_Writer_Word2007_Styles
  • PHPWord_Writer_Word2007_WriterPart

Interfaces

  • PHPWord_Writer_IWriter

Exceptions

  • PHPWord_Exception
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * PHPWord
  4:  *
  5:  * Copyright (c) 2013 PHPWord
  6:  *
  7:  * This library is free software; you can redistribute it and/or
  8:  * modify it under the terms of the GNU Lesser General Public
  9:  * License as published by the Free Software Foundation; either
 10:  * version 2.1 of the License, or (at your option) any later version.
 11:  *
 12:  * This library is distributed in the hope that it will be useful,
 13:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 14:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 15:  * Lesser General Public License for more details.
 16:  *
 17:  * You should have received a copy of the GNU Lesser General Public
 18:  * License along with this library; if not, write to the Free Software
 19:  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 20:  *
 21:  * @category   PHPWord
 22:  * @package    PHPWord
 23:  * @copyright  Copyright (c) 2013 PHPWord
 24:  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
 25:  * @version    0.7.0
 26:  */
 27: 
 28: /**
 29:  * Class PHPWord_Writer_Word2007_Document
 30:  */
 31: class PHPWord_Writer_Word2007_Document extends PHPWord_Writer_Word2007_Base
 32: {
 33: 
 34:     public function writeDocument(PHPWord $pPHPWord = null)
 35:     {
 36:         // Create XML writer
 37: 
 38:         if ($this->getParentWriter()->getUseDiskCaching()) {
 39:             $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
 40:         } else {
 41:             $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY);
 42:         }
 43: 
 44:         // XML header
 45:         $objWriter->startDocument('1.0', 'UTF-8', 'yes');
 46: 
 47:         // w:document
 48:         $objWriter->startElement('w:document');
 49: 
 50:         $objWriter->writeAttribute('xmlns:ve', 'http://schemas.openxmlformats.org/markup-compatibility/2006');
 51:         $objWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office');
 52:         $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
 53:         $objWriter->writeAttribute('xmlns:m', 'http://schemas.openxmlformats.org/officeDocument/2006/math');
 54:         $objWriter->writeAttribute('xmlns:v', 'urn:schemas-microsoft-com:vml');
 55:         $objWriter->writeAttribute('xmlns:wp', 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing');
 56:         $objWriter->writeAttribute('xmlns:w10', 'urn:schemas-microsoft-com:office:word');
 57:         $objWriter->writeAttribute('xmlns:w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main');
 58:         $objWriter->writeAttribute('xmlns:wne', 'http://schemas.microsoft.com/office/word/2006/wordml');
 59: 
 60:         $objWriter->startElement('w:body');
 61: 
 62:         $_sections = $pPHPWord->getSections();
 63:         $countSections = count($_sections);
 64:         $pSection = 0;
 65: 
 66:         if ($countSections > 0) {
 67:             foreach ($_sections as $section) {
 68:                 $pSection++;
 69: 
 70:                 $_elements = $section->getElements();
 71: 
 72:                 foreach ($_elements as $element) {
 73:                     if ($element instanceof PHPWord_Section_Text) {
 74:                         $this->_writeText($objWriter, $element);
 75:                     } elseif ($element instanceof PHPWord_Section_TextRun) {
 76:                         $this->_writeTextRun($objWriter, $element);
 77:                     } elseif ($element instanceof PHPWord_Section_Link) {
 78:                         $this->_writeLink($objWriter, $element);
 79:                     } elseif ($element instanceof PHPWord_Section_Title) {
 80:                         $this->_writeTitle($objWriter, $element);
 81:                     } elseif ($element instanceof PHPWord_Section_TextBreak) {
 82:                         $this->_writeTextBreak($objWriter);
 83:                     } elseif ($element instanceof PHPWord_Section_PageBreak) {
 84:                         $this->_writePageBreak($objWriter);
 85:                     } elseif ($element instanceof PHPWord_Section_Table) {
 86:                         $this->_writeTable($objWriter, $element);
 87:                     } elseif ($element instanceof PHPWord_Section_ListItem) {
 88:                         $this->_writeListItem($objWriter, $element);
 89:                     } elseif ($element instanceof PHPWord_Section_Image ||
 90:                         $element instanceof PHPWord_Section_MemoryImage
 91:                     ) {
 92:                         $this->_writeImage($objWriter, $element);
 93:                     } elseif ($element instanceof PHPWord_Section_Object) {
 94:                         $this->_writeObject($objWriter, $element);
 95:                     } elseif ($element instanceof PHPWord_TOC) {
 96:                         $this->_writeTOC($objWriter);
 97:                     }
 98:                 }
 99: 
100:                 if ($pSection == $countSections) {
101:                     $this->_writeEndSection($objWriter, $section);
102:                 } else {
103:                     $this->_writeSection($objWriter, $section);
104:                 }
105:             }
106:         }
107: 
108:         $objWriter->endElement(); // End w:body
109:         $objWriter->endElement(); // End w:document
110: 
111:         // Return
112:         return $objWriter->getData();
113:     }
114: 
115:     private function _writeSection(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section $section)
116:     {
117:         $objWriter->startElement('w:p');
118:         $objWriter->startElement('w:pPr');
119:         $this->_writeEndSection($objWriter, $section, 3);
120:         $objWriter->endElement();
121:         $objWriter->endElement();
122:     }
123: 
124:     private function _writeEndSection(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section $section)
125:     {
126:         $_settings = $section->getSettings();
127:         $_headers = $section->getHeaders();
128:         $_footer = $section->getFooter();
129:         $pgSzW = $_settings->getPageSizeW();
130:         $pgSzH = $_settings->getPageSizeH();
131:         $orientation = $_settings->getOrientation();
132: 
133:         $marginTop = $_settings->getMarginTop();
134:         $marginLeft = $_settings->getMarginLeft();
135:         $marginRight = $_settings->getMarginRight();
136:         $marginBottom = $_settings->getMarginBottom();
137: 
138:         $borders = $_settings->getBorderSize();
139: 
140:         $colsNum = $_settings->getColsNum();
141:         $colsSpace = $_settings->getColsSpace();
142:         $breakType = $_settings->getBreakType();
143: 
144:         $objWriter->startElement('w:sectPr');
145: 
146:         foreach ($_headers as &$_header) {
147:             $rId = $_header->getRelationId();
148:             $objWriter->startElement('w:headerReference');
149:             $objWriter->writeAttribute('w:type', $_header->getType());
150:             $objWriter->writeAttribute('r:id', 'rId' . $rId);
151:             $objWriter->endElement();
152:         }
153: 
154:         if ($section->hasDifferentFirstPage()) {
155:             $objWriter->startElement('w:titlePg');
156:             $objWriter->endElement();
157:         }
158: 
159:         // http://www.schemacentral.com/sc/ooxml/a-w_val-43.html
160:         if (!is_null($breakType)) {
161:             $objWriter->startElement('w:type');
162:             $objWriter->writeAttribute('w:val', $breakType);
163:             $objWriter->endElement();
164:         }
165: 
166:         if (!is_null($_footer)) {
167:             $rId = $_footer->getRelationId();
168:             $objWriter->startElement('w:footerReference');
169:             $objWriter->writeAttribute('w:type', 'default');
170:             $objWriter->writeAttribute('r:id', 'rId' . $rId);
171:             $objWriter->endElement();
172:         }
173: 
174:         $objWriter->startElement('w:pgSz');
175:         $objWriter->writeAttribute('w:w', $pgSzW);
176:         $objWriter->writeAttribute('w:h', $pgSzH);
177: 
178:         if (!is_null($orientation) && strtolower($orientation) != 'portrait') {
179:             $objWriter->writeAttribute('w:orient', $orientation);
180:         }
181: 
182:         $objWriter->endElement();
183: 
184:         $objWriter->startElement('w:pgMar');
185:         $objWriter->writeAttribute('w:top', $marginTop);
186:         $objWriter->writeAttribute('w:right', $marginRight);
187:         $objWriter->writeAttribute('w:bottom', $marginBottom);
188:         $objWriter->writeAttribute('w:left', $marginLeft);
189:         $objWriter->writeAttribute('w:header', '720');
190:         $objWriter->writeAttribute('w:footer', '720');
191:         $objWriter->writeAttribute('w:gutter', '0');
192:         $objWriter->endElement();
193: 
194: 
195:         if (!is_null($borders[0]) || !is_null($borders[1]) || !is_null($borders[2]) || !is_null($borders[3])) {
196:             $borderColor = $_settings->getBorderColor();
197: 
198:             $objWriter->startElement('w:pgBorders');
199:             $objWriter->writeAttribute('w:offsetFrom', 'page');
200: 
201:             if (!is_null($borders[0])) {
202:                 $objWriter->startElement('w:top');
203:                 $objWriter->writeAttribute('w:val', 'single');
204:                 $objWriter->writeAttribute('w:sz', $borders[0]);
205:                 $objWriter->writeAttribute('w:space', '24');
206:                 $objWriter->writeAttribute('w:color', $borderColor[0]);
207:                 $objWriter->endElement();
208:             }
209: 
210:             if (!is_null($borders[1])) {
211:                 $objWriter->startElement('w:left');
212:                 $objWriter->writeAttribute('w:val', 'single');
213:                 $objWriter->writeAttribute('w:sz', $borders[1]);
214:                 $objWriter->writeAttribute('w:space', '24');
215:                 $objWriter->writeAttribute('w:color', $borderColor[1]);
216:                 $objWriter->endElement();
217:             }
218: 
219:             if (!is_null($borders[2])) {
220:                 $objWriter->startElement('w:right');
221:                 $objWriter->writeAttribute('w:val', 'single');
222:                 $objWriter->writeAttribute('w:sz', $borders[2]);
223:                 $objWriter->writeAttribute('w:space', '24');
224:                 $objWriter->writeAttribute('w:color', $borderColor[2]);
225:                 $objWriter->endElement();
226:             }
227: 
228:             if (!is_null($borders[3])) {
229:                 $objWriter->startElement('w:bottom');
230:                 $objWriter->writeAttribute('w:val', 'single');
231:                 $objWriter->writeAttribute('w:sz', $borders[3]);
232:                 $objWriter->writeAttribute('w:space', '24');
233:                 $objWriter->writeAttribute('w:color', $borderColor[3]);
234:                 $objWriter->endElement();
235:             }
236:             $objWriter->endElement();
237:         }
238: 
239: 
240:         $objWriter->startElement('w:cols');
241:         if($colsNum > 1){
242:             $objWriter->writeAttribute('w:num', $colsNum);
243:             $objWriter->writeAttribute('w:space', $colsSpace);
244:         } else {
245:             $objWriter->writeAttribute('w:space', '720');
246:         }
247:         $objWriter->endElement();
248: 
249: 
250:         $objWriter->endElement();
251:     }
252: 
253:     private function _writePageBreak(PHPWord_Shared_XMLWriter $objWriter = null)
254:     {
255:         $objWriter->startElement('w:p');
256:         $objWriter->startElement('w:r');
257:         $objWriter->startElement('w:br');
258:         $objWriter->writeAttribute('w:type', 'page');
259:         $objWriter->endElement();
260:         $objWriter->endElement();
261:         $objWriter->endElement();
262:     }
263: 
264:     private function _writeListItem(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_ListItem $listItem)
265:     {
266:         $textObject = $listItem->getTextObject();
267:         $text = $textObject->getText();
268:         $styleParagraph = $textObject->getParagraphStyle();
269:         $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
270: 
271:         $depth = $listItem->getDepth();
272:         $listType = $listItem->getStyle()->getListType();
273: 
274:         $objWriter->startElement('w:p');
275:         $objWriter->startElement('w:pPr');
276: 
277:         if ($SpIsObject) {
278:             $this->_writeParagraphStyle($objWriter, $styleParagraph, true);
279:         } elseif (!$SpIsObject && !is_null($styleParagraph)) {
280:             $objWriter->startElement('w:pStyle');
281:             $objWriter->writeAttribute('w:val', $styleParagraph);
282:             $objWriter->endElement();
283:         }
284: 
285:         $objWriter->startElement('w:numPr');
286: 
287:         $objWriter->startElement('w:ilvl');
288:         $objWriter->writeAttribute('w:val', $depth);
289:         $objWriter->endElement();
290: 
291:         $objWriter->startElement('w:numId');
292:         $objWriter->writeAttribute('w:val', $listType);
293:         $objWriter->endElement();
294: 
295:         $objWriter->endElement();
296:         $objWriter->endElement();
297: 
298:         $this->_writeText($objWriter, $textObject, true);
299: 
300:         $objWriter->endElement();
301:     }
302: 
303:     protected function _writeObject(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Object $object)
304:     {
305:         $rIdObject = $object->getRelationId();
306:         $rIdImage = $object->getImageRelationId();
307:         $shapeId = md5($rIdObject . '_' . $rIdImage);
308: 
309:         $objectId = $object->getObjectId();
310: 
311:         $style = $object->getStyle();
312:         $width = $style->getWidth();
313:         $height = $style->getHeight();
314:         $align = $style->getAlign();
315: 
316: 
317:         $objWriter->startElement('w:p');
318: 
319:         if (!is_null($align)) {
320:             $objWriter->startElement('w:pPr');
321:             $objWriter->startElement('w:jc');
322:             $objWriter->writeAttribute('w:val', $align);
323:             $objWriter->endElement();
324:             $objWriter->endElement();
325:         }
326: 
327:         $objWriter->startElement('w:r');
328: 
329:         $objWriter->startElement('w:object');
330:         $objWriter->writeAttribute('w:dxaOrig', '249');
331:         $objWriter->writeAttribute('w:dyaOrig', '160');
332: 
333:         $objWriter->startElement('v:shape');
334:         $objWriter->writeAttribute('id', $shapeId);
335:         $objWriter->writeAttribute('type', '#_x0000_t75');
336:         $objWriter->writeAttribute('style', 'width:104px;height:67px');
337:         $objWriter->writeAttribute('o:ole', '');
338: 
339:         $objWriter->startElement('v:imagedata');
340:         $objWriter->writeAttribute('r:id', 'rId' . $rIdImage);
341:         $objWriter->writeAttribute('o:title', '');
342:         $objWriter->endElement();
343: 
344:         $objWriter->endElement();
345: 
346:         $objWriter->startElement('o:OLEObject');
347:         $objWriter->writeAttribute('Type', 'Embed');
348:         $objWriter->writeAttribute('ProgID', 'Package');
349:         $objWriter->writeAttribute('ShapeID', $shapeId);
350:         $objWriter->writeAttribute('DrawAspect', 'Icon');
351:         $objWriter->writeAttribute('ObjectID', '_' . $objectId);
352:         $objWriter->writeAttribute('r:id', 'rId' . $rIdObject);
353:         $objWriter->endElement();
354: 
355:         $objWriter->endElement();
356: 
357:         $objWriter->endElement(); // w:r
358: 
359:         $objWriter->endElement(); // w:p
360:     }
361: 
362:     private function _writeTOC(PHPWord_Shared_XMLWriter $objWriter = null)
363:     {
364:         $titles = PHPWord_TOC::getTitles();
365:         $styleFont = PHPWord_TOC::getStyleFont();
366: 
367:         $styleTOC = PHPWord_TOC::getStyleTOC();
368:         $fIndent = $styleTOC->getIndent();
369:         $tabLeader = $styleTOC->getTabLeader();
370:         $tabPos = $styleTOC->getTabPos();
371: 
372:         $isObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;
373: 
374:         for ($i = 0; $i < count($titles); $i++) {
375:             $title = $titles[$i];
376:             $indent = ($title['depth'] - 1) * $fIndent;
377: 
378:             $objWriter->startElement('w:p');
379: 
380:             $objWriter->startElement('w:pPr');
381: 
382:             if ($isObject && !is_null($styleFont->getParagraphStyle())) {
383:                 $this->_writeParagraphStyle($objWriter, $styleFont->getParagraphStyle());
384:             }
385: 
386:             if ($indent > 0) {
387:                 $objWriter->startElement('w:ind');
388:                 $objWriter->writeAttribute('w:left', $indent);
389:                 $objWriter->endElement();
390:             }
391: 
392:             if (!empty($styleFont) && !$isObject) {
393:                 $objWriter->startElement('w:pPr');
394:                 $objWriter->startElement('w:pStyle');
395:                 $objWriter->writeAttribute('w:val', $styleFont);
396:                 $objWriter->endElement();
397:                 $objWriter->endElement();
398:             }
399: 
400:             $objWriter->startElement('w:tabs');
401:             $objWriter->startElement('w:tab');
402:             $objWriter->writeAttribute('w:val', 'right');
403:             if (!empty($tabLeader)) {
404:                 $objWriter->writeAttribute('w:leader', $tabLeader);
405:             }
406:             $objWriter->writeAttribute('w:pos', $tabPos);
407:             $objWriter->endElement();
408:             $objWriter->endElement();
409: 
410:             $objWriter->endElement(); // w:pPr
411: 
412: 
413:             if ($i == 0) {
414:                 $objWriter->startElement('w:r');
415:                 $objWriter->startElement('w:fldChar');
416:                 $objWriter->writeAttribute('w:fldCharType', 'begin');
417:                 $objWriter->endElement();
418:                 $objWriter->endElement();
419: 
420:                 $objWriter->startElement('w:r');
421:                 $objWriter->startElement('w:instrText');
422:                 $objWriter->writeAttribute('xml:space', 'preserve');
423:                 $objWriter->writeRaw('TOC \o "1-9" \h \z \u');
424:                 $objWriter->endElement();
425:                 $objWriter->endElement();
426: 
427:                 $objWriter->startElement('w:r');
428:                 $objWriter->startElement('w:fldChar');
429:                 $objWriter->writeAttribute('w:fldCharType', 'separate');
430:                 $objWriter->endElement();
431:                 $objWriter->endElement();
432:             }
433: 
434:             $objWriter->startElement('w:hyperlink');
435:             $objWriter->writeAttribute('w:anchor', $title['anchor']);
436:             $objWriter->writeAttribute('w:history', '1');
437: 
438:             $objWriter->startElement('w:r');
439: 
440:             if ($isObject) {
441:                 $this->_writeTextStyle($objWriter, $styleFont);
442:             }
443: 
444:             $objWriter->startElement('w:t');
445:             $objWriter->writeRaw($title['text']);
446:             $objWriter->endElement();
447:             $objWriter->endElement();
448: 
449:             $objWriter->startElement('w:r');
450:             $objWriter->writeElement('w:tab', null);
451:             $objWriter->endElement();
452: 
453:             $objWriter->startElement('w:r');
454:             $objWriter->startElement('w:fldChar');
455:             $objWriter->writeAttribute('w:fldCharType', 'begin');
456:             $objWriter->endElement();
457:             $objWriter->endElement();
458: 
459:             $objWriter->startElement('w:r');
460:             $objWriter->startElement('w:instrText');
461:             $objWriter->writeAttribute('xml:space', 'preserve');
462:             $objWriter->writeRaw('PAGEREF ' . $title['anchor'] . ' \h');
463:             $objWriter->endElement();
464:             $objWriter->endElement();
465: 
466:             $objWriter->startElement('w:r');
467:             $objWriter->startElement('w:fldChar');
468:             $objWriter->writeAttribute('w:fldCharType', 'end');
469:             $objWriter->endElement();
470:             $objWriter->endElement();
471: 
472:             $objWriter->endElement(); // w:hyperlink
473: 
474:             $objWriter->endElement(); // w:p
475:         }
476: 
477:         $objWriter->startElement('w:p');
478:         $objWriter->startElement('w:r');
479:         $objWriter->startElement('w:fldChar');
480:         $objWriter->writeAttribute('w:fldCharType', 'end');
481:         $objWriter->endElement();
482:         $objWriter->endElement();
483:         $objWriter->endElement();
484:     }
485: }
486: 
PHPWord API Docs API documentation generated by ApiGen 2.8.0