Rev 2388 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** PHPExcel** Copyright (c) 2006 - 2013 PHPExcel** 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 PHPExcel* @package PHPExcel_Writer_Excel2007* @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL* @version ##VERSION##, ##DATE##*//*** PHPExcel_Writer_Excel2007_Theme** @category PHPExcel* @package PHPExcel_Writer_Excel2007* @copyright Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)*/class PHPExcel_Writer_Excel2007_Theme extends PHPExcel_Writer_Excel2007_WriterPart{/*** Map of Major fonts to write* @static array of string**/private static $_majorFonts = array('Jpan' => 'MS Pゴシック','Hang' => '맑은 고딕','Hans' => '宋体','Hant' => '新細明體','Arab' => 'Times New Roman','Hebr' => 'Times New Roman','Thai' => 'Tahoma','Ethi' => 'Nyala','Beng' => 'Vrinda','Gujr' => 'Shruti','Khmr' => 'MoolBoran','Knda' => 'Tunga','Guru' => 'Raavi','Cans' => 'Euphemia','Cher' => 'Plantagenet Cherokee','Yiii' => 'Microsoft Yi Baiti','Tibt' => 'Microsoft Himalaya','Thaa' => 'MV Boli','Deva' => 'Mangal','Telu' => 'Gautami','Taml' => 'Latha','Syrc' => 'Estrangelo Edessa','Orya' => 'Kalinga','Mlym' => 'Kartika','Laoo' => 'DokChampa','Sinh' => 'Iskoola Pota','Mong' => 'Mongolian Baiti','Viet' => 'Times New Roman','Uigh' => 'Microsoft Uighur','Geor' => 'Sylfaen',);/*** Map of Minor fonts to write* @static array of string**/private static $_minorFonts = array('Jpan' => 'MS Pゴシック','Hang' => '맑은 고딕','Hans' => '宋体','Hant' => '新細明體','Arab' => 'Arial','Hebr' => 'Arial','Thai' => 'Tahoma','Ethi' => 'Nyala','Beng' => 'Vrinda','Gujr' => 'Shruti','Khmr' => 'DaunPenh','Knda' => 'Tunga','Guru' => 'Raavi','Cans' => 'Euphemia','Cher' => 'Plantagenet Cherokee','Yiii' => 'Microsoft Yi Baiti','Tibt' => 'Microsoft Himalaya','Thaa' => 'MV Boli','Deva' => 'Mangal','Telu' => 'Gautami','Taml' => 'Latha','Syrc' => 'Estrangelo Edessa','Orya' => 'Kalinga','Mlym' => 'Kartika','Laoo' => 'DokChampa','Sinh' => 'Iskoola Pota','Mong' => 'Mongolian Baiti','Viet' => 'Arial','Uigh' => 'Microsoft Uighur','Geor' => 'Sylfaen',);/*** Map of core colours* @static array of string**/private static $_colourScheme = array('dk2' => '1F497D','lt2' => 'EEECE1','accent1' => '4F81BD','accent2' => 'C0504D','accent3' => '9BBB59','accent4' => '8064A2','accent5' => '4BACC6','accent6' => 'F79646','hlink' => '0000FF','folHlink' => '800080',);/*** Write theme to XML format** @param PHPExcel $pPHPExcel* @return string XML Output* @throws PHPExcel_Writer_Exception*/public function writeTheme(PHPExcel $pPHPExcel = null){// Create XML writer$objWriter = null;if ($this->getParentWriter()->getUseDiskCaching()) {$objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());} else {$objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);}// XML header$objWriter->startDocument('1.0','UTF-8','yes');// a:theme$objWriter->startElement('a:theme');$objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');$objWriter->writeAttribute('name', 'Office Theme');// a:themeElements$objWriter->startElement('a:themeElements');// a:clrScheme$objWriter->startElement('a:clrScheme');$objWriter->writeAttribute('name', 'Office');// a:dk1$objWriter->startElement('a:dk1');// a:sysClr$objWriter->startElement('a:sysClr');$objWriter->writeAttribute('val', 'windowText');$objWriter->writeAttribute('lastClr', '000000');$objWriter->endElement();$objWriter->endElement();// a:lt1$objWriter->startElement('a:lt1');// a:sysClr$objWriter->startElement('a:sysClr');$objWriter->writeAttribute('val', 'window');$objWriter->writeAttribute('lastClr', 'FFFFFF');$objWriter->endElement();$objWriter->endElement();// a:dk2$this->_writeColourScheme($objWriter);$objWriter->endElement();// a:fontScheme$objWriter->startElement('a:fontScheme');$objWriter->writeAttribute('name', 'Office');// a:majorFont$objWriter->startElement('a:majorFont');$this->_writeFonts($objWriter, 'Cambria', self::$_majorFonts);$objWriter->endElement();// a:minorFont$objWriter->startElement('a:minorFont');$this->_writeFonts($objWriter, 'Calibri', self::$_minorFonts);$objWriter->endElement();$objWriter->endElement();// a:fmtScheme$objWriter->startElement('a:fmtScheme');$objWriter->writeAttribute('name', 'Office');// a:fillStyleLst$objWriter->startElement('a:fillStyleLst');// a:solidFill$objWriter->startElement('a:solidFill');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');$objWriter->endElement();$objWriter->endElement();// a:gradFill$objWriter->startElement('a:gradFill');$objWriter->writeAttribute('rotWithShape', '1');// a:gsLst$objWriter->startElement('a:gsLst');// a:gs$objWriter->startElement('a:gs');$objWriter->writeAttribute('pos', '0');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:tint$objWriter->startElement('a:tint');$objWriter->writeAttribute('val', '50000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '300000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:gs$objWriter->startElement('a:gs');$objWriter->writeAttribute('pos', '35000');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:tint$objWriter->startElement('a:tint');$objWriter->writeAttribute('val', '37000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '300000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:gs$objWriter->startElement('a:gs');$objWriter->writeAttribute('pos', '100000');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:tint$objWriter->startElement('a:tint');$objWriter->writeAttribute('val', '15000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '350000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:lin$objWriter->startElement('a:lin');$objWriter->writeAttribute('ang', '16200000');$objWriter->writeAttribute('scaled', '1');$objWriter->endElement();$objWriter->endElement();// a:gradFill$objWriter->startElement('a:gradFill');$objWriter->writeAttribute('rotWithShape', '1');// a:gsLst$objWriter->startElement('a:gsLst');// a:gs$objWriter->startElement('a:gs');$objWriter->writeAttribute('pos', '0');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:shade$objWriter->startElement('a:shade');$objWriter->writeAttribute('val', '51000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '130000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:gs$objWriter->startElement('a:gs');$objWriter->writeAttribute('pos', '80000');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:shade$objWriter->startElement('a:shade');$objWriter->writeAttribute('val', '93000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '130000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:gs$objWriter->startElement('a:gs');$objWriter->writeAttribute('pos', '100000');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:shade$objWriter->startElement('a:shade');$objWriter->writeAttribute('val', '94000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '135000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:lin$objWriter->startElement('a:lin');$objWriter->writeAttribute('ang', '16200000');$objWriter->writeAttribute('scaled', '0');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:lnStyleLst$objWriter->startElement('a:lnStyleLst');// a:ln$objWriter->startElement('a:ln');$objWriter->writeAttribute('w', '9525');$objWriter->writeAttribute('cap', 'flat');$objWriter->writeAttribute('cmpd', 'sng');$objWriter->writeAttribute('algn', 'ctr');// a:solidFill$objWriter->startElement('a:solidFill');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:shade$objWriter->startElement('a:shade');$objWriter->writeAttribute('val', '95000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '105000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:prstDash$objWriter->startElement('a:prstDash');$objWriter->writeAttribute('val', 'solid');$objWriter->endElement();$objWriter->endElement();// a:ln$objWriter->startElement('a:ln');$objWriter->writeAttribute('w', '25400');$objWriter->writeAttribute('cap', 'flat');$objWriter->writeAttribute('cmpd', 'sng');$objWriter->writeAttribute('algn', 'ctr');// a:solidFill$objWriter->startElement('a:solidFill');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');$objWriter->endElement();$objWriter->endElement();// a:prstDash$objWriter->startElement('a:prstDash');$objWriter->writeAttribute('val', 'solid');$objWriter->endElement();$objWriter->endElement();// a:ln$objWriter->startElement('a:ln');$objWriter->writeAttribute('w', '38100');$objWriter->writeAttribute('cap', 'flat');$objWriter->writeAttribute('cmpd', 'sng');$objWriter->writeAttribute('algn', 'ctr');// a:solidFill$objWriter->startElement('a:solidFill');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');$objWriter->endElement();$objWriter->endElement();// a:prstDash$objWriter->startElement('a:prstDash');$objWriter->writeAttribute('val', 'solid');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:effectStyleLst$objWriter->startElement('a:effectStyleLst');// a:effectStyle$objWriter->startElement('a:effectStyle');// a:effectLst$objWriter->startElement('a:effectLst');// a:outerShdw$objWriter->startElement('a:outerShdw');$objWriter->writeAttribute('blurRad', '40000');$objWriter->writeAttribute('dist', '20000');$objWriter->writeAttribute('dir', '5400000');$objWriter->writeAttribute('rotWithShape', '0');// a:srgbClr$objWriter->startElement('a:srgbClr');$objWriter->writeAttribute('val', '000000');// a:alpha$objWriter->startElement('a:alpha');$objWriter->writeAttribute('val', '38000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:effectStyle$objWriter->startElement('a:effectStyle');// a:effectLst$objWriter->startElement('a:effectLst');// a:outerShdw$objWriter->startElement('a:outerShdw');$objWriter->writeAttribute('blurRad', '40000');$objWriter->writeAttribute('dist', '23000');$objWriter->writeAttribute('dir', '5400000');$objWriter->writeAttribute('rotWithShape', '0');// a:srgbClr$objWriter->startElement('a:srgbClr');$objWriter->writeAttribute('val', '000000');// a:alpha$objWriter->startElement('a:alpha');$objWriter->writeAttribute('val', '35000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:effectStyle$objWriter->startElement('a:effectStyle');// a:effectLst$objWriter->startElement('a:effectLst');// a:outerShdw$objWriter->startElement('a:outerShdw');$objWriter->writeAttribute('blurRad', '40000');$objWriter->writeAttribute('dist', '23000');$objWriter->writeAttribute('dir', '5400000');$objWriter->writeAttribute('rotWithShape', '0');// a:srgbClr$objWriter->startElement('a:srgbClr');$objWriter->writeAttribute('val', '000000');// a:alpha$objWriter->startElement('a:alpha');$objWriter->writeAttribute('val', '35000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:scene3d$objWriter->startElement('a:scene3d');// a:camera$objWriter->startElement('a:camera');$objWriter->writeAttribute('prst', 'orthographicFront');// a:rot$objWriter->startElement('a:rot');$objWriter->writeAttribute('lat', '0');$objWriter->writeAttribute('lon', '0');$objWriter->writeAttribute('rev', '0');$objWriter->endElement();$objWriter->endElement();// a:lightRig$objWriter->startElement('a:lightRig');$objWriter->writeAttribute('rig', 'threePt');$objWriter->writeAttribute('dir', 't');// a:rot$objWriter->startElement('a:rot');$objWriter->writeAttribute('lat', '0');$objWriter->writeAttribute('lon', '0');$objWriter->writeAttribute('rev', '1200000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:sp3d$objWriter->startElement('a:sp3d');// a:bevelT$objWriter->startElement('a:bevelT');$objWriter->writeAttribute('w', '63500');$objWriter->writeAttribute('h', '25400');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:bgFillStyleLst$objWriter->startElement('a:bgFillStyleLst');// a:solidFill$objWriter->startElement('a:solidFill');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');$objWriter->endElement();$objWriter->endElement();// a:gradFill$objWriter->startElement('a:gradFill');$objWriter->writeAttribute('rotWithShape', '1');// a:gsLst$objWriter->startElement('a:gsLst');// a:gs$objWriter->startElement('a:gs');$objWriter->writeAttribute('pos', '0');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:tint$objWriter->startElement('a:tint');$objWriter->writeAttribute('val', '40000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '350000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:gs$objWriter->startElement('a:gs');$objWriter->writeAttribute('pos', '40000');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:tint$objWriter->startElement('a:tint');$objWriter->writeAttribute('val', '45000');$objWriter->endElement();// a:shade$objWriter->startElement('a:shade');$objWriter->writeAttribute('val', '99000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '350000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:gs$objWriter->startElement('a:gs');$objWriter->writeAttribute('pos', '100000');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:shade$objWriter->startElement('a:shade');$objWriter->writeAttribute('val', '20000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '255000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:path$objWriter->startElement('a:path');$objWriter->writeAttribute('path', 'circle');// a:fillToRect$objWriter->startElement('a:fillToRect');$objWriter->writeAttribute('l', '50000');$objWriter->writeAttribute('t', '-80000');$objWriter->writeAttribute('r', '50000');$objWriter->writeAttribute('b', '180000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:gradFill$objWriter->startElement('a:gradFill');$objWriter->writeAttribute('rotWithShape', '1');// a:gsLst$objWriter->startElement('a:gsLst');// a:gs$objWriter->startElement('a:gs');$objWriter->writeAttribute('pos', '0');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:tint$objWriter->startElement('a:tint');$objWriter->writeAttribute('val', '80000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '300000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:gs$objWriter->startElement('a:gs');$objWriter->writeAttribute('pos', '100000');// a:schemeClr$objWriter->startElement('a:schemeClr');$objWriter->writeAttribute('val', 'phClr');// a:shade$objWriter->startElement('a:shade');$objWriter->writeAttribute('val', '30000');$objWriter->endElement();// a:satMod$objWriter->startElement('a:satMod');$objWriter->writeAttribute('val', '200000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:path$objWriter->startElement('a:path');$objWriter->writeAttribute('path', 'circle');// a:fillToRect$objWriter->startElement('a:fillToRect');$objWriter->writeAttribute('l', '50000');$objWriter->writeAttribute('t', '50000');$objWriter->writeAttribute('r', '50000');$objWriter->writeAttribute('b', '50000');$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();$objWriter->endElement();// a:objectDefaults$objWriter->writeElement('a:objectDefaults', null);// a:extraClrSchemeLst$objWriter->writeElement('a:extraClrSchemeLst', null);$objWriter->endElement();// Returnreturn $objWriter->getData();}/*** Write fonts to XML format** @param PHPExcel_Shared_XMLWriter $objWriter* @param string $latinFont* @param array of string $fontSet* @return string XML Output* @throws PHPExcel_Writer_Exception*/private function _writeFonts($objWriter, $latinFont, $fontSet){// a:latin$objWriter->startElement('a:latin');$objWriter->writeAttribute('typeface', $latinFont);$objWriter->endElement();// a:ea$objWriter->startElement('a:ea');$objWriter->writeAttribute('typeface', '');$objWriter->endElement();// a:cs$objWriter->startElement('a:cs');$objWriter->writeAttribute('typeface', '');$objWriter->endElement();foreach($fontSet as $fontScript => $typeface) {$objWriter->startElement('a:font');$objWriter->writeAttribute('script', $fontScript);$objWriter->writeAttribute('typeface', $typeface);$objWriter->endElement();}}/*** Write colour scheme to XML format** @param PHPExcel_Shared_XMLWriter $objWriter* @return string XML Output* @throws PHPExcel_Writer_Exception*/private function _writeColourScheme($objWriter){foreach(self::$_colourScheme as $colourName => $colourValue) {$objWriter->startElement('a:'.$colourName);$objWriter->startElement('a:srgbClr');$objWriter->writeAttribute('val', $colourValue);$objWriter->endElement();$objWriter->endElement();}}}