PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/application/third_party/PHPWord/PHPWord/Writer/Word2007/Base.php

https://bitbucket.org/ebmalifer/mindanaojobs
PHP | 706 lines | 543 code | 130 blank | 33 comment | 93 complexity | 36c718caf7a90bede5652770828d01c7 MD5 | raw file
Possible License(s): LGPL-3.0, LGPL-2.1, GPL-3.0, MPL-2.0-no-copyleft-exception
  1. <?php
  2. /**
  3. * PHPWord
  4. *
  5. * Copyright (c) 2011 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) 010 PHPWord
  24. * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
  25. * @version Beta 0.6.3, 08.07.2011
  26. */
  27. class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
  28. protected function _writeText(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Text $text, $withoutP = false) {
  29. $styleFont = $text->getFontStyle();
  30. $SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;
  31. if(!$withoutP) {
  32. $objWriter->startElement('w:p');
  33. $styleParagraph = $text->getParagraphStyle();
  34. $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
  35. if($SpIsObject) {
  36. $this->_writeParagraphStyle($objWriter, $styleParagraph);
  37. } elseif(!$SpIsObject && !is_null($styleParagraph)) {
  38. $objWriter->startElement('w:pPr');
  39. $objWriter->startElement('w:pStyle');
  40. $objWriter->writeAttribute('w:val', $styleParagraph);
  41. $objWriter->endElement();
  42. $objWriter->endElement();
  43. }
  44. }
  45. $strText = htmlspecialchars($text->getText());
  46. $strText = PHPWord_Shared_String::ControlCharacterPHP2OOXML($strText);
  47. $objWriter->startElement('w:r');
  48. if($SfIsObject) {
  49. $this->_writeTextStyle($objWriter, $styleFont);
  50. } elseif(!$SfIsObject && !is_null($styleFont)) {
  51. $objWriter->startElement('w:rPr');
  52. $objWriter->startElement('w:rStyle');
  53. $objWriter->writeAttribute('w:val', $styleFont);
  54. $objWriter->endElement();
  55. $objWriter->endElement();
  56. }
  57. $objWriter->startElement('w:t');
  58. $objWriter->writeAttribute('xml:space', 'preserve'); // needed because of drawing spaces before and after text
  59. $objWriter->writeRaw($strText);
  60. $objWriter->endElement();
  61. $objWriter->endElement(); // w:r
  62. if(!$withoutP) {
  63. $objWriter->endElement(); // w:p
  64. }
  65. }
  66. protected function _writeTextRun(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_TextRun $textrun) {
  67. $elements = $textrun->getElements();
  68. $styleParagraph = $textrun->getParagraphStyle();
  69. $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
  70. $objWriter->startElement('w:p');
  71. if($SpIsObject) {
  72. $this->_writeParagraphStyle($objWriter, $styleParagraph);
  73. } elseif(!$SpIsObject && !is_null($styleParagraph)) {
  74. $objWriter->startElement('w:pPr');
  75. $objWriter->startElement('w:pStyle');
  76. $objWriter->writeAttribute('w:val', $styleParagraph);
  77. $objWriter->endElement();
  78. $objWriter->endElement();
  79. }
  80. if(count($elements) > 0) {
  81. foreach($elements as $element) {
  82. if($element instanceof PHPWord_Section_Text) {
  83. $this->_writeText($objWriter, $element, true);
  84. } elseif($element instanceof PHPWord_Section_Link) {
  85. $this->_writeLink($objWriter, $element, true);
  86. }
  87. }
  88. }
  89. $objWriter->endElement();
  90. }
  91. protected function _writeParagraphStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Paragraph $style, $withoutPPR = false) {
  92. $align = $style->getAlign();
  93. $spaceBefore = $style->getSpaceBefore();
  94. $spaceAfter = $style->getSpaceAfter();
  95. $spacing = $style->getSpacing();
  96. if(!is_null($align) || !is_null($spacing) || !is_null($spaceBefore) || !is_null($spaceAfter)) {
  97. if(!$withoutPPR) {
  98. $objWriter->startElement('w:pPr');
  99. }
  100. if(!is_null($align)) {
  101. $objWriter->startElement('w:jc');
  102. $objWriter->writeAttribute('w:val', $align);
  103. $objWriter->endElement();
  104. }
  105. if(!is_null($spaceBefore) || !is_null($spaceAfter) || !is_null($spacing)) {
  106. $objWriter->startElement('w:spacing');
  107. if(!is_null($spaceBefore)) {
  108. $objWriter->writeAttribute('w:before', $spaceBefore);
  109. }
  110. if(!is_null($spaceAfter)) {
  111. $objWriter->writeAttribute('w:after', $spaceAfter);
  112. }
  113. if(!is_null($spacing)) {
  114. $objWriter->writeAttribute('w:line', $spacing);
  115. $objWriter->writeAttribute('w:lineRule', 'auto');
  116. }
  117. $objWriter->endElement();
  118. }
  119. if(!$withoutPPR) {
  120. $objWriter->endElement(); // w:pPr
  121. }
  122. }
  123. }
  124. protected function _writeLink(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Link $link, $withoutP = false) {
  125. $rID = $link->getRelationId();
  126. $linkName = $link->getLinkName();
  127. if(is_null($linkName)) {
  128. $linkName = $link->getLinkSrc();
  129. }
  130. $styleFont = $link->getFontStyle();
  131. $SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;
  132. if(!$withoutP) {
  133. $objWriter->startElement('w:p');
  134. $styleParagraph = $link->getParagraphStyle();
  135. $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
  136. if($SpIsObject) {
  137. $this->_writeParagraphStyle($objWriter, $styleParagraph);
  138. } elseif(!$SpIsObject && !is_null($styleParagraph)) {
  139. $objWriter->startElement('w:pPr');
  140. $objWriter->startElement('w:pStyle');
  141. $objWriter->writeAttribute('w:val', $styleParagraph);
  142. $objWriter->endElement();
  143. $objWriter->endElement();
  144. }
  145. }
  146. $objWriter->startElement('w:hyperlink');
  147. $objWriter->writeAttribute('r:id', 'rId'.$rID);
  148. $objWriter->writeAttribute('w:history', '1');
  149. $objWriter->startElement('w:r');
  150. if($SfIsObject) {
  151. $this->_writeTextStyle($objWriter, $styleFont);
  152. } elseif(!$SfIsObject && !is_null($styleFont)) {
  153. $objWriter->startElement('w:rPr');
  154. $objWriter->startElement('w:rStyle');
  155. $objWriter->writeAttribute('w:val', $styleFont);
  156. $objWriter->endElement();
  157. $objWriter->endElement();
  158. }
  159. $objWriter->startElement('w:t');
  160. $objWriter->writeAttribute('xml:space', 'preserve'); // needed because of drawing spaces before and after text
  161. $objWriter->writeRaw($linkName);
  162. $objWriter->endElement();
  163. $objWriter->endElement();
  164. $objWriter->endElement();
  165. if(!$withoutP) {
  166. $objWriter->endElement(); // w:p
  167. }
  168. }
  169. protected function _writePreserveText(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Footer_PreserveText $textrun) {
  170. $styleFont = $textrun->getFontStyle();
  171. $styleParagraph = $textrun->getParagraphStyle();
  172. $SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;
  173. $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
  174. $arrText = $textrun->getText();
  175. $objWriter->startElement('w:p');
  176. if($SpIsObject) {
  177. $this->_writeParagraphStyle($objWriter, $styleParagraph);
  178. } elseif(!$SpIsObject && !is_null($styleParagraph)) {
  179. $objWriter->startElement('w:pPr');
  180. $objWriter->startElement('w:pStyle');
  181. $objWriter->writeAttribute('w:val', $styleParagraph);
  182. $objWriter->endElement();
  183. $objWriter->endElement();
  184. }
  185. foreach($arrText as $text) {
  186. if(substr($text, 0, 1) == '{') {
  187. $text = substr($text, 1, -1);
  188. $objWriter->startElement('w:r');
  189. $objWriter->startElement('w:fldChar');
  190. $objWriter->writeAttribute('w:fldCharType', 'begin');
  191. $objWriter->endElement();
  192. $objWriter->endElement();
  193. $objWriter->startElement('w:r');
  194. if($SfIsObject) {
  195. $this->_writeTextStyle($objWriter, $styleFont);
  196. } elseif(!$SfIsObject && !is_null($styleFont)) {
  197. $objWriter->startElement('w:rPr');
  198. $objWriter->startElement('w:rStyle');
  199. $objWriter->writeAttribute('w:val', $styleFont);
  200. $objWriter->endElement();
  201. $objWriter->endElement();
  202. }
  203. $objWriter->startElement('w:instrText');
  204. $objWriter->writeAttribute('xml:space', 'preserve');
  205. $objWriter->writeRaw($text);
  206. $objWriter->endElement();
  207. $objWriter->endElement();
  208. $objWriter->startElement('w:r');
  209. $objWriter->startElement('w:fldChar');
  210. $objWriter->writeAttribute('w:fldCharType', 'separate');
  211. $objWriter->endElement();
  212. $objWriter->endElement();
  213. $objWriter->startElement('w:r');
  214. $objWriter->startElement('w:fldChar');
  215. $objWriter->writeAttribute('w:fldCharType', 'end');
  216. $objWriter->endElement();
  217. $objWriter->endElement();
  218. } else {
  219. $text = htmlspecialchars($text);
  220. $text = PHPWord_Shared_String::ControlCharacterPHP2OOXML($text);
  221. $objWriter->startElement('w:r');
  222. if($SfIsObject) {
  223. $this->_writeTextStyle($objWriter, $styleFont);
  224. } elseif(!$SfIsObject && !is_null($styleFont)) {
  225. $objWriter->startElement('w:rPr');
  226. $objWriter->startElement('w:rStyle');
  227. $objWriter->writeAttribute('w:val', $styleFont);
  228. $objWriter->endElement();
  229. $objWriter->endElement();
  230. }
  231. $objWriter->startElement('w:t');
  232. $objWriter->writeAttribute('xml:space', 'preserve');
  233. $objWriter->writeRaw($text);
  234. $objWriter->endElement();
  235. $objWriter->endElement();
  236. }
  237. }
  238. $objWriter->endElement(); // p
  239. }
  240. protected function _writeTextStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Font $style) {
  241. $font = $style->getName();
  242. $bold = $style->getBold();
  243. $italic = $style->getItalic();
  244. $color = $style->getColor();
  245. $size = $style->getSize();
  246. $fgColor = $style->getFgColor();
  247. $striketrough = $style->getStrikethrough();
  248. $underline = $style->getUnderline();
  249. $objWriter->startElement('w:rPr');
  250. // Font
  251. if($font != 'Arial') {
  252. $objWriter->startElement('w:rFonts');
  253. $objWriter->writeAttribute('w:ascii', $font);
  254. $objWriter->writeAttribute('w:hAnsi', $font);
  255. $objWriter->writeAttribute('w:cs', $font);
  256. $objWriter->endElement();
  257. }
  258. // Color
  259. if($color != '000000') {
  260. $objWriter->startElement('w:color');
  261. $objWriter->writeAttribute('w:val', $color);
  262. $objWriter->endElement();
  263. }
  264. // Size
  265. if($size != 20) {
  266. $objWriter->startElement('w:sz');
  267. $objWriter->writeAttribute('w:val', $size);
  268. $objWriter->endElement();
  269. $objWriter->startElement('w:szCs');
  270. $objWriter->writeAttribute('w:val', $size);
  271. $objWriter->endElement();
  272. }
  273. // Bold
  274. if($bold) {
  275. $objWriter->writeElement('w:b', null);
  276. }
  277. // Italic
  278. if($italic) {
  279. $objWriter->writeElement('w:i', null);
  280. $objWriter->writeElement('w:iCs', null);
  281. }
  282. // Underline
  283. if(!is_null($underline) && $underline != 'none') {
  284. $objWriter->startElement('w:u');
  285. $objWriter->writeAttribute('w:val', $underline);
  286. $objWriter->endElement();
  287. }
  288. // Striketrough
  289. if($striketrough) {
  290. $objWriter->writeElement('w:strike', null);
  291. }
  292. // Foreground-Color
  293. if(!is_null($fgColor)) {
  294. $objWriter->startElement('w:highlight');
  295. $objWriter->writeAttribute('w:val', $fgColor);
  296. $objWriter->endElement();
  297. }
  298. $objWriter->endElement();
  299. }
  300. protected function _writeTextBreak(PHPWord_Shared_XMLWriter $objWriter = null) {
  301. $objWriter->writeElement('w:p', null);
  302. }
  303. protected function _writeTable(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Table $table) {
  304. $_rows = $table->getRows();
  305. $_cRows = count($_rows);
  306. if($_cRows > 0) {
  307. $objWriter->startElement('w:tbl');
  308. $tblStyle = $table->getStyle();
  309. if($tblStyle instanceof PHPWord_Style_Table) {
  310. $this->_writeTableStyle($objWriter, $tblStyle);
  311. } else {
  312. if(!empty($tblStyle)) {
  313. $objWriter->startElement('w:tblPr');
  314. $objWriter->startElement('w:tblStyle');
  315. $objWriter->writeAttribute('w:val', $tblStyle);
  316. $objWriter->endElement();
  317. $objWriter->endElement();
  318. }
  319. }
  320. $_heights = $table->getRowHeights();
  321. for($i=0; $i<$_cRows; $i++) {
  322. $row = $_rows[$i];
  323. $height = $_heights[$i];
  324. $objWriter->startElement('w:tr');
  325. if(!is_null($height)) {
  326. $objWriter->startElement('w:trPr');
  327. $objWriter->startElement('w:trHeight');
  328. $objWriter->writeAttribute('w:val', $height);
  329. $objWriter->endElement();
  330. $objWriter->endElement();
  331. }
  332. foreach($row as $cell) {
  333. $objWriter->startElement('w:tc');
  334. $cellStyle = $cell->getStyle();
  335. $width = $cell->getWidth();
  336. $objWriter->startElement('w:tcPr');
  337. $objWriter->startElement('w:tcW');
  338. $objWriter->writeAttribute('w:w', $width);
  339. $objWriter->writeAttribute('w:type', 'dxa');
  340. $objWriter->endElement();
  341. if($cellStyle instanceof PHPWord_Style_Cell) {
  342. $this->_writeCellStyle($objWriter, $cellStyle);
  343. }
  344. $objWriter->endElement();
  345. $_elements = $cell->getElements();
  346. if(count($_elements) > 0) {
  347. foreach($_elements as $element) {
  348. if($element instanceof PHPWord_Section_Text) {
  349. $this->_writeText($objWriter, $element);
  350. } elseif($element instanceof PHPWord_Section_TextRun) {
  351. $this->_writeTextRun($objWriter, $element);
  352. } elseif($element instanceof PHPWord_Section_Link) {
  353. $this->_writeLink($objWriter, $element);
  354. } elseif($element instanceof PHPWord_Section_TextBreak) {
  355. $this->_writeTextBreak($objWriter);
  356. } elseif($element instanceof PHPWord_Section_ListItem) {
  357. $this->_writeListItem($objWriter, $element);
  358. } elseif($element instanceof PHPWord_Section_Image ||
  359. $element instanceof PHPWord_Section_MemoryImage) {
  360. $this->_writeImage($objWriter, $element);
  361. } elseif($element instanceof PHPWord_Section_Object) {
  362. $this->_writeObject($objWriter, $element);
  363. } elseif($element instanceof PHPWord_Section_Footer_PreserveText) {
  364. $this->_writePreserveText($objWriter, $element);
  365. }
  366. }
  367. } else {
  368. $this->_writeTextBreak($objWriter);
  369. }
  370. $objWriter->endElement();
  371. }
  372. $objWriter->endElement();
  373. }
  374. $objWriter->endElement();
  375. }
  376. }
  377. protected function _writeTableStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Table $style = null) {
  378. $margins = $style->getCellMargin();
  379. $mTop = (!is_null($margins[0])) ? true : false;
  380. $mLeft = (!is_null($margins[1])) ? true : false;
  381. $mRight = (!is_null($margins[2])) ? true : false;
  382. $mBottom = (!is_null($margins[3])) ? true : false;
  383. if($mTop || $mLeft || $mRight || $mBottom) {
  384. $objWriter->startElement('w:tblPr');
  385. $objWriter->startElement('w:tblCellMar');
  386. if($mTop) {
  387. $objWriter->startElement('w:top');
  388. $objWriter->writeAttribute('w:w', $margins[0]);
  389. $objWriter->writeAttribute('w:type', 'dxa');
  390. $objWriter->endElement();
  391. }
  392. if($mLeft) {
  393. $objWriter->startElement('w:left');
  394. $objWriter->writeAttribute('w:w', $margins[1]);
  395. $objWriter->writeAttribute('w:type', 'dxa');
  396. $objWriter->endElement();
  397. }
  398. if($mRight) {
  399. $objWriter->startElement('w:right');
  400. $objWriter->writeAttribute('w:w', $margins[2]);
  401. $objWriter->writeAttribute('w:type', 'dxa');
  402. $objWriter->endElement();
  403. }
  404. if($mBottom) {
  405. $objWriter->startElement('w:bottom');
  406. $objWriter->writeAttribute('w:w', $margins[3]);
  407. $objWriter->writeAttribute('w:type', 'dxa');
  408. $objWriter->endElement();
  409. }
  410. $objWriter->endElement();
  411. $objWriter->endElement();
  412. }
  413. }
  414. protected function _writeCellStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Cell $style = null) {
  415. $bgColor = $style->getBgColor();
  416. $valign = $style->getVAlign();
  417. $textDir = $style->getTextDirection();
  418. $brdSz = $style->getBorderSize();
  419. $brdCol = $style->getBorderColor();
  420. $bTop = (!is_null($brdSz[0])) ? true : false;
  421. $bLeft = (!is_null($brdSz[1])) ? true : false;
  422. $bRight = (!is_null($brdSz[2])) ? true : false;
  423. $bBottom = (!is_null($brdSz[3])) ? true : false;
  424. $borders = ($bTop || $bLeft || $bRight || $bBottom) ? true : false;
  425. $styles = (!is_null($bgColor) || !is_null($valign) || !is_null($textDir) || $borders) ? true : false;
  426. if($styles) {
  427. if(!is_null($textDir)) {
  428. $objWriter->startElement('w:textDirection');
  429. $objWriter->writeAttribute('w:val', $textDir);
  430. $objWriter->endElement();
  431. }
  432. if(!is_null($bgColor)) {
  433. $objWriter->startElement('w:shd');
  434. $objWriter->writeAttribute('w:val', 'clear');
  435. $objWriter->writeAttribute('w:color', 'auto');
  436. $objWriter->writeAttribute('w:fill', $bgColor);
  437. $objWriter->endElement();
  438. }
  439. if(!is_null($valign)) {
  440. $objWriter->startElement('w:vAlign');
  441. $objWriter->writeAttribute('w:val', $valign);
  442. $objWriter->endElement();
  443. }
  444. if($borders) {
  445. $_defaultColor = $style->getDefaultBorderColor();
  446. $objWriter->startElement('w:tcBorders');
  447. if($bTop) {
  448. if(is_null($brdCol[0])) { $brdCol[0] = $_defaultColor; }
  449. $objWriter->startElement('w:top');
  450. $objWriter->writeAttribute('w:val', 'single');
  451. $objWriter->writeAttribute('w:sz', $brdSz[0]);
  452. $objWriter->writeAttribute('w:color', $brdCol[0]);
  453. $objWriter->endElement();
  454. }
  455. if($bLeft) {
  456. if(is_null($brdCol[1])) { $brdCol[1] = $_defaultColor; }
  457. $objWriter->startElement('w:left');
  458. $objWriter->writeAttribute('w:val', 'single');
  459. $objWriter->writeAttribute('w:sz', $brdSz[1]);
  460. $objWriter->writeAttribute('w:color', $brdCol[1]);
  461. $objWriter->endElement();
  462. }
  463. if($bRight) {
  464. if(is_null($brdCol[2])) { $brdCol[2] = $_defaultColor; }
  465. $objWriter->startElement('w:right');
  466. $objWriter->writeAttribute('w:val', 'single');
  467. $objWriter->writeAttribute('w:sz', $brdSz[2]);
  468. $objWriter->writeAttribute('w:color', $brdCol[2]);
  469. $objWriter->endElement();
  470. }
  471. if($bBottom) {
  472. if(is_null($brdCol[3])) { $brdCol[3] = $_defaultColor; }
  473. $objWriter->startElement('w:bottom');
  474. $objWriter->writeAttribute('w:val', 'single');
  475. $objWriter->writeAttribute('w:sz', $brdSz[3]);
  476. $objWriter->writeAttribute('w:color', $brdCol[3]);
  477. $objWriter->endElement();
  478. }
  479. $objWriter->endElement();
  480. }
  481. }
  482. }
  483. protected function _writeImage(PHPWord_Shared_XMLWriter $objWriter = null, $image) {
  484. $rId = $image->getRelationId();
  485. $style = $image->getStyle();
  486. $width = $style->getWidth();
  487. $height = $style->getHeight();
  488. $align = $style->getAlign();
  489. $objWriter->startElement('w:p');
  490. if(!is_null($align)) {
  491. $objWriter->startElement('w:pPr');
  492. $objWriter->startElement('w:jc');
  493. $objWriter->writeAttribute('w:val', $align);
  494. $objWriter->endElement();
  495. $objWriter->endElement();
  496. }
  497. $objWriter->startElement('w:r');
  498. $objWriter->startElement('w:pict');
  499. $objWriter->startElement('v:shape');
  500. $objWriter->writeAttribute('type', '#_x0000_t75');
  501. $objWriter->writeAttribute('style', 'width:'.$width.'px;height:'.$height.'px');
  502. $objWriter->startElement('v:imagedata');
  503. $objWriter->writeAttribute('r:id', 'rId'.$rId);
  504. $objWriter->writeAttribute('o:title', '');
  505. $objWriter->endElement();
  506. $objWriter->endElement();
  507. $objWriter->endElement();
  508. $objWriter->endElement();
  509. $objWriter->endElement();
  510. }
  511. protected function _writeWatermark(PHPWord_Shared_XMLWriter $objWriter = null, $image) {
  512. $rId = $image->getRelationId();
  513. $style = $image->getStyle();
  514. $width = $style->getWidth();
  515. $height = $style->getHeight();
  516. $marginLeft = $style->getMarginLeft();
  517. $marginTop = $style->getMarginTop();
  518. $objWriter->startElement('w:p');
  519. $objWriter->startElement('w:r');
  520. $objWriter->startElement('w:pict');
  521. $objWriter->startElement('v:shape');
  522. $objWriter->writeAttribute('type', '#_x0000_t75');
  523. $strStyle = 'position:absolute;';
  524. $strStyle .= ' width:'.$width.'px;';
  525. $strStyle .= ' height:'.$height.'px;';
  526. if(!is_null($marginTop)) {
  527. $strStyle .= ' margin-top:'.$marginTop.'px;';
  528. }
  529. if(!is_null($marginLeft)) {
  530. $strStyle .= ' margin-left:'.$marginLeft.'px;';
  531. }
  532. $objWriter->writeAttribute('style', $strStyle);
  533. $objWriter->startElement('v:imagedata');
  534. $objWriter->writeAttribute('r:id', 'rId'.$rId);
  535. $objWriter->writeAttribute('o:title', '');
  536. $objWriter->endElement();
  537. $objWriter->endElement();
  538. $objWriter->endElement();
  539. $objWriter->endElement();
  540. $objWriter->endElement();
  541. }
  542. protected function _writeTitle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Title $title) {
  543. $text = htmlspecialchars($title->getText());
  544. $text = PHPWord_Shared_String::ControlCharacterPHP2OOXML($text);
  545. $anchor = $title->getAnchor();
  546. $bookmarkId = $title->getBookmarkId();
  547. $style = $title->getStyle();
  548. $objWriter->startElement('w:p');
  549. if(!empty($style)) {
  550. $objWriter->startElement('w:pPr');
  551. $objWriter->startElement('w:pStyle');
  552. $objWriter->writeAttribute('w:val', $style);
  553. $objWriter->endElement();
  554. $objWriter->endElement();
  555. }
  556. $objWriter->startElement('w:r');
  557. $objWriter->startElement('w:fldChar');
  558. $objWriter->writeAttribute('w:fldCharType', 'end');
  559. $objWriter->endElement();
  560. $objWriter->endElement();
  561. $objWriter->startElement('w:bookmarkStart');
  562. $objWriter->writeAttribute('w:id', $bookmarkId);
  563. $objWriter->writeAttribute('w:name', $anchor);
  564. $objWriter->endElement();
  565. $objWriter->startElement('w:r');
  566. $objWriter->startElement('w:t');
  567. $objWriter->writeRaw($text);
  568. $objWriter->endElement();
  569. $objWriter->endElement();
  570. $objWriter->startElement('w:bookmarkEnd');
  571. $objWriter->writeAttribute('w:id', $bookmarkId);
  572. $objWriter->endElement();
  573. $objWriter->endElement();
  574. }
  575. }
  576. ?>