1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
27:
28: 29: 30:
31: class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart
32: {
33:
34: protected function _writeText(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Text $text, $withoutP = false)
35: {
36: $styleFont = $text->getFontStyle();
37:
38: $SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;
39:
40: if (!$withoutP) {
41: $objWriter->startElement('w:p');
42:
43: $styleParagraph = $text->getParagraphStyle();
44: $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
45:
46: if ($SpIsObject) {
47: $this->_writeParagraphStyle($objWriter, $styleParagraph);
48: } elseif (!$SpIsObject && !is_null($styleParagraph)) {
49: $objWriter->startElement('w:pPr');
50: $objWriter->startElement('w:pStyle');
51: $objWriter->writeAttribute('w:val', $styleParagraph);
52: $objWriter->endElement();
53: $objWriter->endElement();
54: }
55: }
56:
57: $strText = htmlspecialchars($text->getText());
58: $strText = PHPWord_Shared_String::ControlCharacterPHP2OOXML($strText);
59:
60: $objWriter->startElement('w:r');
61:
62: if ($SfIsObject) {
63: $this->_writeTextStyle($objWriter, $styleFont);
64: } elseif (!$SfIsObject && !is_null($styleFont)) {
65: $objWriter->startElement('w:rPr');
66: $objWriter->startElement('w:rStyle');
67: $objWriter->writeAttribute('w:val', $styleFont);
68: $objWriter->endElement();
69: $objWriter->endElement();
70: }
71:
72: $objWriter->startElement('w:t');
73: $objWriter->writeAttribute('xml:space', 'preserve');
74: $objWriter->writeRaw($strText);
75: $objWriter->endElement();
76:
77: $objWriter->endElement();
78:
79: if (!$withoutP) {
80: $objWriter->endElement();
81: }
82: }
83:
84: protected function _writeTextRun(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_TextRun $textrun)
85: {
86: $elements = $textrun->getElements();
87: $styleParagraph = $textrun->getParagraphStyle();
88:
89: $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
90:
91: $objWriter->startElement('w:p');
92:
93: if ($SpIsObject) {
94: $this->_writeParagraphStyle($objWriter, $styleParagraph);
95: } elseif (!$SpIsObject && !is_null($styleParagraph)) {
96: $objWriter->startElement('w:pPr');
97: $objWriter->startElement('w:pStyle');
98: $objWriter->writeAttribute('w:val', $styleParagraph);
99: $objWriter->endElement();
100: $objWriter->endElement();
101: }
102:
103: if (count($elements) > 0) {
104: foreach ($elements as $element) {
105: if ($element instanceof PHPWord_Section_Text) {
106: $this->_writeText($objWriter, $element, true);
107: } elseif ($element instanceof PHPWord_Section_Link) {
108: $this->_writeLink($objWriter, $element, true);
109: } elseif($element instanceof PHPWord_Section_TextBreak) {
110: $objWriter->writeElement('w:br');
111: }
112: }
113: }
114:
115: $objWriter->endElement();
116: }
117:
118: protected function _writeParagraphStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Paragraph $style, $withoutPPR = false)
119: {
120: $align = $style->getAlign();
121: $spaceBefore = $style->getSpaceBefore();
122: $spaceAfter = $style->getSpaceAfter();
123: $spacing = $style->getSpacing();
124: $indent = $style->getIndent();
125: $hanging = $style->getHanging();
126: $tabs = $style->getTabs();
127:
128: if (!is_null($align) || !is_null($spacing) || !is_null($spaceBefore) || !is_null($spaceAfter) || !is_null($indent) || !is_null($tabs)) {
129: if (!$withoutPPR) {
130: $objWriter->startElement('w:pPr');
131: }
132:
133: if (!is_null($align)) {
134: $objWriter->startElement('w:jc');
135: $objWriter->writeAttribute('w:val', $align);
136: $objWriter->endElement();
137: }
138:
139: if (!is_null($indent) || !is_null($hanging)) {
140: $objWriter->startElement('w:ind');
141: $objWriter->writeAttribute('w:firstLine', 0);
142: if (!is_null($indent)) {
143: $objWriter->writeAttribute('w:left', $indent);
144: }
145: if (!is_null($hanging)) {
146: $objWriter->writeAttribute('w:hanging', $hanging);
147: }
148: $objWriter->endElement();
149: }
150:
151: if (!is_null($spaceBefore) || !is_null($spaceAfter) || !is_null($spacing)) {
152: $objWriter->startElement('w:spacing');
153: if (!is_null($spaceBefore)) {
154: $objWriter->writeAttribute('w:before', $spaceBefore);
155: }
156: if (!is_null($spaceAfter)) {
157: $objWriter->writeAttribute('w:after', $spaceAfter);
158: }
159: if (!is_null($spacing)) {
160: $objWriter->writeAttribute('w:line', $spacing);
161: $objWriter->writeAttribute('w:lineRule', 'auto');
162: }
163: $objWriter->endElement();
164: }
165:
166: if (!is_null($tabs)) {
167: $tabs->toXml($objWriter);
168: }
169:
170: if (!$withoutPPR) {
171: $objWriter->endElement();
172: }
173: }
174: }
175:
176: protected function _writeLink(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Link $link, $withoutP = false)
177: {
178: $rID = $link->getRelationId();
179: $linkName = $link->getLinkName();
180: if (is_null($linkName)) {
181: $linkName = $link->getLinkSrc();
182: }
183:
184: $styleFont = $link->getFontStyle();
185: $SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;
186:
187: if (!$withoutP) {
188: $objWriter->startElement('w:p');
189:
190: $styleParagraph = $link->getParagraphStyle();
191: $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
192:
193: if ($SpIsObject) {
194: $this->_writeParagraphStyle($objWriter, $styleParagraph);
195: } elseif (!$SpIsObject && !is_null($styleParagraph)) {
196: $objWriter->startElement('w:pPr');
197: $objWriter->startElement('w:pStyle');
198: $objWriter->writeAttribute('w:val', $styleParagraph);
199: $objWriter->endElement();
200: $objWriter->endElement();
201: }
202: }
203:
204: $objWriter->startElement('w:hyperlink');
205: $objWriter->writeAttribute('r:id', 'rId' . $rID);
206: $objWriter->writeAttribute('w:history', '1');
207:
208: $objWriter->startElement('w:r');
209: if ($SfIsObject) {
210: $this->_writeTextStyle($objWriter, $styleFont);
211: } elseif (!$SfIsObject && !is_null($styleFont)) {
212: $objWriter->startElement('w:rPr');
213: $objWriter->startElement('w:rStyle');
214: $objWriter->writeAttribute('w:val', $styleFont);
215: $objWriter->endElement();
216: $objWriter->endElement();
217: }
218:
219: $objWriter->startElement('w:t');
220: $objWriter->writeAttribute('xml:space', 'preserve');
221: $objWriter->writeRaw($linkName);
222: $objWriter->endElement();
223: $objWriter->endElement();
224:
225: $objWriter->endElement();
226:
227: if (!$withoutP) {
228: $objWriter->endElement();
229: }
230: }
231:
232: protected function _writePreserveText(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Footer_PreserveText $textrun)
233: {
234: $styleFont = $textrun->getFontStyle();
235: $styleParagraph = $textrun->getParagraphStyle();
236:
237: $SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;
238: $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
239:
240: $arrText = $textrun->getText();
241:
242: $objWriter->startElement('w:p');
243:
244: if ($SpIsObject) {
245: $this->_writeParagraphStyle($objWriter, $styleParagraph);
246: } elseif (!$SpIsObject && !is_null($styleParagraph)) {
247: $objWriter->startElement('w:pPr');
248: $objWriter->startElement('w:pStyle');
249: $objWriter->writeAttribute('w:val', $styleParagraph);
250: $objWriter->endElement();
251: $objWriter->endElement();
252: }
253:
254: foreach ($arrText as $text) {
255:
256: if (substr($text, 0, 1) == '{') {
257: $text = substr($text, 1, -1);
258:
259: $objWriter->startElement('w:r');
260: $objWriter->startElement('w:fldChar');
261: $objWriter->writeAttribute('w:fldCharType', 'begin');
262: $objWriter->endElement();
263: $objWriter->endElement();
264:
265: $objWriter->startElement('w:r');
266:
267: if ($SfIsObject) {
268: $this->_writeTextStyle($objWriter, $styleFont);
269: } elseif (!$SfIsObject && !is_null($styleFont)) {
270: $objWriter->startElement('w:rPr');
271: $objWriter->startElement('w:rStyle');
272: $objWriter->writeAttribute('w:val', $styleFont);
273: $objWriter->endElement();
274: $objWriter->endElement();
275: }
276:
277: $objWriter->startElement('w:instrText');
278: $objWriter->writeAttribute('xml:space', 'preserve');
279: $objWriter->writeRaw($text);
280: $objWriter->endElement();
281: $objWriter->endElement();
282:
283: $objWriter->startElement('w:r');
284: $objWriter->startElement('w:fldChar');
285: $objWriter->writeAttribute('w:fldCharType', 'separate');
286: $objWriter->endElement();
287: $objWriter->endElement();
288:
289: $objWriter->startElement('w:r');
290: $objWriter->startElement('w:fldChar');
291: $objWriter->writeAttribute('w:fldCharType', 'end');
292: $objWriter->endElement();
293: $objWriter->endElement();
294: } else {
295: $text = htmlspecialchars($text);
296: $text = PHPWord_Shared_String::ControlCharacterPHP2OOXML($text);
297:
298: $objWriter->startElement('w:r');
299:
300: if ($SfIsObject) {
301: $this->_writeTextStyle($objWriter, $styleFont);
302: } elseif (!$SfIsObject && !is_null($styleFont)) {
303: $objWriter->startElement('w:rPr');
304: $objWriter->startElement('w:rStyle');
305: $objWriter->writeAttribute('w:val', $styleFont);
306: $objWriter->endElement();
307: $objWriter->endElement();
308: }
309:
310: $objWriter->startElement('w:t');
311: $objWriter->writeAttribute('xml:space', 'preserve');
312: $objWriter->writeRaw($text);
313: $objWriter->endElement();
314: $objWriter->endElement();
315: }
316: }
317:
318: $objWriter->endElement();
319: }
320:
321: protected function _writeTextStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Font $style)
322: {
323: $font = $style->getName();
324: $bold = $style->getBold();
325: $italic = $style->getItalic();
326: $color = $style->getColor();
327: $size = $style->getSize();
328: $fgColor = $style->getFgColor();
329: $striketrough = $style->getStrikethrough();
330: $underline = $style->getUnderline();
331: $superscript = $style->getSuperScript();
332: $subscript = $style->getSubScript();
333:
334: $objWriter->startElement('w:rPr');
335:
336:
337: if ($font != PHPWord::DEFAULT_FONT_NAME) {
338: $objWriter->startElement('w:rFonts');
339: $objWriter->writeAttribute('w:ascii', $font);
340: $objWriter->writeAttribute('w:hAnsi', $font);
341: $objWriter->writeAttribute('w:cs', $font);
342: $objWriter->endElement();
343: }
344:
345:
346: if ($color != '000000') {
347: $objWriter->startElement('w:color');
348: $objWriter->writeAttribute('w:val', $color);
349: $objWriter->endElement();
350: }
351:
352:
353: if ($size != PHPWord::DEFAULT_FONT_SIZE) {
354: $objWriter->startElement('w:sz');
355: $objWriter->writeAttribute('w:val', $size);
356: $objWriter->endElement();
357: $objWriter->startElement('w:szCs');
358: $objWriter->writeAttribute('w:val', $size);
359: $objWriter->endElement();
360: }
361:
362:
363: if ($bold) {
364: $objWriter->writeElement('w:b', null);
365: }
366:
367:
368: if ($italic) {
369: $objWriter->writeElement('w:i', null);
370: $objWriter->writeElement('w:iCs', null);
371: }
372:
373:
374: if (!is_null($underline) && $underline != 'none') {
375: $objWriter->startElement('w:u');
376: $objWriter->writeAttribute('w:val', $underline);
377: $objWriter->endElement();
378: }
379:
380:
381: if ($striketrough) {
382: $objWriter->writeElement('w:strike', null);
383: }
384:
385:
386: if (!is_null($fgColor)) {
387: $objWriter->startElement('w:highlight');
388: $objWriter->writeAttribute('w:val', $fgColor);
389: $objWriter->endElement();
390: }
391:
392:
393: if ($superscript || $subscript) {
394: $objWriter->startElement('w:vertAlign');
395: $objWriter->writeAttribute('w:val', $superscript ? 'superscript' : 'subscript');
396: $objWriter->endElement();
397: }
398:
399: $objWriter->endElement();
400: }
401:
402: protected function _writeTextBreak(PHPWord_Shared_XMLWriter $objWriter = null)
403: {
404: $objWriter->writeElement('w:p', null);
405: }
406:
407: protected function _writeTable(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Table $table)
408: {
409: $_rows = $table->getRows();
410: $_cRows = count($_rows);
411:
412: if ($_cRows > 0) {
413: $objWriter->startElement('w:tbl');
414: $tblStyle = $table->getStyle();
415: $tblWidth = $table->getWidth();
416: if ($tblStyle instanceof PHPWord_Style_Table) {
417: $this->_writeTableStyle($objWriter, $tblStyle);
418: } else {
419: if (!empty($tblStyle)) {
420: $objWriter->startElement('w:tblPr');
421: $objWriter->startElement('w:tblStyle');
422: $objWriter->writeAttribute('w:val', $tblStyle);
423: $objWriter->endElement();
424: if (!is_null($tblWidth)) {
425: $objWriter->startElement('w:tblW');
426: $objWriter->writeAttribute('w:w', $tblWidth);
427: $objWriter->writeAttribute('w:type', 'pct');
428: $objWriter->endElement();
429: }
430: $objWriter->endElement();
431: }
432: }
433:
434: for ($i = 0; $i < $_cRows; $i++) {
435: $row = $_rows[$i];
436: $height = $row->getHeight();
437: $rowStyle = $row->getStyle();
438: $tblHeader = $rowStyle->getTblHeader();
439: $cantSplit = $rowStyle->getCantSplit();
440:
441: $objWriter->startElement('w:tr');
442:
443: if (!is_null($height) || !is_null($tblHeader) || !is_null($cantSplit)) {
444: $objWriter->startElement('w:trPr');
445: if (!is_null($height)) {
446: $objWriter->startElement('w:trHeight');
447: $objWriter->writeAttribute('w:val', $height);
448: $objWriter->endElement();
449: }
450: if (!is_null($tblHeader)) {
451: $objWriter->startElement('w:tblHeader');
452: $objWriter->writeAttribute('w:val', $tblHeader);
453: $objWriter->endElement();
454: }
455: if (!is_null($cantSplit)) {
456: $objWriter->startElement('w:cantSplit');
457: $objWriter->writeAttribute('w:val', $cantSplit);
458: $objWriter->endElement();
459: }
460: $objWriter->endElement();
461: }
462:
463: foreach ($row->getCells() as $cell) {
464: $objWriter->startElement('w:tc');
465:
466: $cellStyle = $cell->getStyle();
467: $width = $cell->getWidth();
468:
469: $objWriter->startElement('w:tcPr');
470: $objWriter->startElement('w:tcW');
471: $objWriter->writeAttribute('w:w', $width);
472: $objWriter->writeAttribute('w:type', 'pct');
473: $objWriter->endElement();
474:
475: if ($cellStyle instanceof PHPWord_Style_Cell) {
476: $this->_writeCellStyle($objWriter, $cellStyle);
477: }
478:
479: $objWriter->endElement();
480:
481: $_elements = $cell->getElements();
482: if (count($_elements) > 0) {
483: foreach ($_elements as $element) {
484: if ($element instanceof PHPWord_Section_Text) {
485: $this->_writeText($objWriter, $element);
486: } elseif ($element instanceof PHPWord_Section_TextRun) {
487: $this->_writeTextRun($objWriter, $element);
488: } elseif ($element instanceof PHPWord_Section_Link) {
489: $this->_writeLink($objWriter, $element);
490: } elseif ($element instanceof PHPWord_Section_TextBreak) {
491: $this->_writeTextBreak($objWriter);
492: } elseif ($element instanceof PHPWord_Section_ListItem) {
493: $this->_writeListItem($objWriter, $element);
494: } elseif ($element instanceof PHPWord_Section_Image ||
495: $element instanceof PHPWord_Section_MemoryImage
496: ) {
497: $this->_writeImage($objWriter, $element);
498: } elseif ($element instanceof PHPWord_Section_Object) {
499: $this->_writeObject($objWriter, $element);
500: } elseif ($element instanceof PHPWord_Section_Footer_PreserveText) {
501: $this->_writePreserveText($objWriter, $element);
502: }
503: }
504: } else {
505: $this->_writeTextBreak($objWriter);
506: }
507:
508: $objWriter->endElement();
509: }
510: $objWriter->endElement();
511: }
512: $objWriter->endElement();
513: }
514: }
515:
516: protected function _writeTableStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Table $style = null)
517: {
518: $margins = $style->getCellMargin();
519: $mTop = (!is_null($margins[0])) ? true : false;
520: $mLeft = (!is_null($margins[1])) ? true : false;
521: $mRight = (!is_null($margins[2])) ? true : false;
522: $mBottom = (!is_null($margins[3])) ? true : false;
523:
524: if ($mTop || $mLeft || $mRight || $mBottom) {
525: $objWriter->startElement('w:tblPr');
526: $objWriter->startElement('w:tblCellMar');
527:
528: if ($mTop) {
529: $objWriter->startElement('w:top');
530: $objWriter->writeAttribute('w:w', $margins[0]);
531: $objWriter->writeAttribute('w:type', 'dxa');
532: $objWriter->endElement();
533: }
534:
535: if ($mLeft) {
536: $objWriter->startElement('w:left');
537: $objWriter->writeAttribute('w:w', $margins[1]);
538: $objWriter->writeAttribute('w:type', 'dxa');
539: $objWriter->endElement();
540: }
541:
542: if ($mRight) {
543: $objWriter->startElement('w:right');
544: $objWriter->writeAttribute('w:w', $margins[2]);
545: $objWriter->writeAttribute('w:type', 'dxa');
546: $objWriter->endElement();
547: }
548:
549: if ($mBottom) {
550: $objWriter->startElement('w:bottom');
551: $objWriter->writeAttribute('w:w', $margins[3]);
552: $objWriter->writeAttribute('w:type', 'dxa');
553: $objWriter->endElement();
554: }
555:
556: $objWriter->endElement();
557: $objWriter->endElement();
558: }
559: }
560:
561: protected function _writeCellStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Cell $style = null)
562: {
563: $bgColor = $style->getBgColor();
564: $valign = $style->getVAlign();
565: $textDir = $style->getTextDirection();
566: $brdSz = $style->getBorderSize();
567: $brdCol = $style->getBorderColor();
568:
569: $bTop = (!is_null($brdSz[0])) ? true : false;
570: $bLeft = (!is_null($brdSz[1])) ? true : false;
571: $bRight = (!is_null($brdSz[2])) ? true : false;
572: $bBottom = (!is_null($brdSz[3])) ? true : false;
573: $borders = ($bTop || $bLeft || $bRight || $bBottom) ? true : false;
574:
575: $styles = (!is_null($bgColor) || !is_null($valign) || !is_null($textDir) || $borders) ? true : false;
576:
577: if ($styles) {
578: if (!is_null($textDir)) {
579: $objWriter->startElement('w:textDirection');
580: $objWriter->writeAttribute('w:val', $textDir);
581: $objWriter->endElement();
582: }
583:
584: if (!is_null($bgColor)) {
585: $objWriter->startElement('w:shd');
586: $objWriter->writeAttribute('w:val', 'clear');
587: $objWriter->writeAttribute('w:color', 'auto');
588: $objWriter->writeAttribute('w:fill', $bgColor);
589: $objWriter->endElement();
590: }
591:
592: if (!is_null($valign)) {
593: $objWriter->startElement('w:vAlign');
594: $objWriter->writeAttribute('w:val', $valign);
595: $objWriter->endElement();
596: }
597:
598: if ($borders) {
599: $_defaultColor = $style->getDefaultBorderColor();
600:
601: $objWriter->startElement('w:tcBorders');
602: if ($bTop) {
603: if (is_null($brdCol[0])) {
604: $brdCol[0] = $_defaultColor;
605: }
606: $objWriter->startElement('w:top');
607: $objWriter->writeAttribute('w:val', 'single');
608: $objWriter->writeAttribute('w:sz', $brdSz[0]);
609: $objWriter->writeAttribute('w:color', $brdCol[0]);
610: $objWriter->endElement();
611: }
612:
613: if ($bLeft) {
614: if (is_null($brdCol[1])) {
615: $brdCol[1] = $_defaultColor;
616: }
617: $objWriter->startElement('w:left');
618: $objWriter->writeAttribute('w:val', 'single');
619: $objWriter->writeAttribute('w:sz', $brdSz[1]);
620: $objWriter->writeAttribute('w:color', $brdCol[1]);
621: $objWriter->endElement();
622: }
623:
624: if ($bRight) {
625: if (is_null($brdCol[2])) {
626: $brdCol[2] = $_defaultColor;
627: }
628: $objWriter->startElement('w:right');
629: $objWriter->writeAttribute('w:val', 'single');
630: $objWriter->writeAttribute('w:sz', $brdSz[2]);
631: $objWriter->writeAttribute('w:color', $brdCol[2]);
632: $objWriter->endElement();
633: }
634:
635: if ($bBottom) {
636: if (is_null($brdCol[3])) {
637: $brdCol[3] = $_defaultColor;
638: }
639: $objWriter->startElement('w:bottom');
640: $objWriter->writeAttribute('w:val', 'single');
641: $objWriter->writeAttribute('w:sz', $brdSz[3]);
642: $objWriter->writeAttribute('w:color', $brdCol[3]);
643: $objWriter->endElement();
644: }
645:
646: $objWriter->endElement();
647: }
648: }
649: $gridSpan = $style->getGridSpan();
650: if (!is_null($gridSpan)) {
651: $objWriter->startElement('w:gridSpan');
652: $objWriter->writeAttribute('w:val', $gridSpan);
653: $objWriter->endElement();
654: }
655:
656: $vMerge = $style->getVMerge();
657: if (!is_null($vMerge)) {
658: $objWriter->startElement('w:vMerge');
659: $objWriter->writeAttribute('w:val', $vMerge);
660: $objWriter->endElement();
661: }
662: }
663:
664: 665: 666: 667:
668: protected function _writeImage(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Image $image)
669: {
670: $rId = $image->getRelationId();
671:
672: $style = $image->getStyle();
673: $width = $style->getWidth();
674: $height = $style->getHeight();
675: $align = $style->getAlign();
676: $marginTop = $style->getMarginTop();
677: $marginLeft = $style->getMarginLeft();
678: $wrappingStyle = $style->getWrappingStyle();
679:
680: $objWriter->startElement('w:p');
681:
682: if (!is_null($align)) {
683: $objWriter->startElement('w:pPr');
684: $objWriter->startElement('w:jc');
685: $objWriter->writeAttribute('w:val', $align);
686: $objWriter->endElement();
687: $objWriter->endElement();
688: }
689:
690: $objWriter->startElement('w:r');
691:
692: $objWriter->startElement('w:pict');
693:
694: $objWriter->startElement('v:shape');
695: $objWriter->writeAttribute('type', '#_x0000_t75');
696:
697: $imgStyle = '';
698: if (null !== $width) {
699: $imgStyle .= 'width:' . $width . 'px;';
700: }
701: if (null !== $height) {
702: $imgStyle .= 'height:' . $height . 'px;';
703: }
704: if (null !== $marginTop) {
705: $imgStyle .= 'margin-top:' . $marginTop . 'in;';
706: }
707: if (null !== $marginLeft) {
708: $imgStyle .= 'margin-left:' . $marginLeft . 'in;';
709: }
710:
711: switch ($wrappingStyle) {
712: case PHPWord_Style_Image::WRAPPING_STYLE_BEHIND:
713: $imgStyle .= 'position:absolute;z-index:-251658752;';
714: break;
715: case PHPWord_Style_Image::WRAPPING_STYLE_SQUARE:
716: $imgStyle .= 'position:absolute;z-index:251659264;mso-position-horizontal:absolute;mso-position-vertical:absolute;';
717: break;
718: case PHPWord_Style_Image::WRAPPING_STYLE_TIGHT:
719: $imgStyle .= 'position:absolute;z-index:251659264;mso-wrap-edited:f;mso-position-horizontal:absolute;mso-position-vertical:absolute';
720: break;
721: case PHPWord_Style_Image::WRAPPING_STYLE_INFRONT:
722: $imgStyle .= 'position:absolute;zz-index:251659264;mso-position-horizontal:absolute;mso-position-vertical:absolute;';
723: break;
724: }
725:
726: $objWriter->writeAttribute('style', $imgStyle);
727:
728: $objWriter->startElement('v:imagedata');
729: $objWriter->writeAttribute('r:id', 'rId' . $rId);
730: $objWriter->writeAttribute('o:title', '');
731: $objWriter->endElement();
732: $objWriter->endElement();
733:
734: $objWriter->endElement();
735:
736: $objWriter->endElement();
737:
738: $objWriter->endElement();
739: }
740:
741: protected function _writeWatermark(PHPWord_Shared_XMLWriter $objWriter = null, $image)
742: {
743: $rId = $image->getRelationId();
744:
745: $style = $image->getStyle();
746: $width = $style->getWidth();
747: $height = $style->getHeight();
748: $marginLeft = $style->getMarginLeft();
749: $marginTop = $style->getMarginTop();
750:
751: $objWriter->startElement('w:p');
752:
753: $objWriter->startElement('w:r');
754:
755: $objWriter->startElement('w:pict');
756:
757: $objWriter->startElement('v:shape');
758: $objWriter->writeAttribute('type', '#_x0000_t75');
759:
760: $strStyle = 'position:absolute;';
761: $strStyle .= ' width:' . $width . 'px;';
762: $strStyle .= ' height:' . $height . 'px;';
763: if (!is_null($marginTop)) {
764: $strStyle .= ' margin-top:' . $marginTop . 'px;';
765: }
766: if (!is_null($marginLeft)) {
767: $strStyle .= ' margin-left:' . $marginLeft . 'px;';
768: }
769:
770: $objWriter->writeAttribute('style', $strStyle);
771:
772: $objWriter->startElement('v:imagedata');
773: $objWriter->writeAttribute('r:id', 'rId' . $rId);
774: $objWriter->writeAttribute('o:title', '');
775: $objWriter->endElement();
776: $objWriter->endElement();
777:
778: $objWriter->endElement();
779:
780: $objWriter->endElement();
781:
782: $objWriter->endElement();
783: }
784:
785: protected function _writeTitle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Title $title)
786: {
787: $text = htmlspecialchars($title->getText());
788: $text = PHPWord_Shared_String::ControlCharacterPHP2OOXML($text);
789: $anchor = $title->getAnchor();
790: $bookmarkId = $title->getBookmarkId();
791: $style = $title->getStyle();
792:
793: $objWriter->startElement('w:p');
794:
795: if (!empty($style)) {
796: $objWriter->startElement('w:pPr');
797: $objWriter->startElement('w:pStyle');
798: $objWriter->writeAttribute('w:val', $style);
799: $objWriter->endElement();
800: $objWriter->endElement();
801: }
802:
803: $objWriter->startElement('w:r');
804: $objWriter->startElement('w:fldChar');
805: $objWriter->writeAttribute('w:fldCharType', 'end');
806: $objWriter->endElement();
807: $objWriter->endElement();
808:
809: $objWriter->startElement('w:bookmarkStart');
810: $objWriter->writeAttribute('w:id', $bookmarkId);
811: $objWriter->writeAttribute('w:name', $anchor);
812: $objWriter->endElement();
813:
814: $objWriter->startElement('w:r');
815: $objWriter->startElement('w:t');
816: $objWriter->writeRaw($text);
817: $objWriter->endElement();
818: $objWriter->endElement();
819:
820: $objWriter->startElement('w:bookmarkEnd');
821: $objWriter->writeAttribute('w:id', $bookmarkId);
822: $objWriter->endElement();
823:
824: $objWriter->endElement();
825: }
826: }