PHPExcel_Writer_Excel2007
[ class tree: PHPExcel_Writer_Excel2007 ] [ index: PHPExcel_Writer_Excel2007 ] [ all elements ]

Source for file ContentTypes.php

Documentation is available at ContentTypes.php

  1. <?php
  2. /**
  3.  * PHPExcel
  4.  *
  5.  * Copyright (c) 2006 - 2011 PHPExcel
  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   PHPExcel
  22.  * @package    PHPExcel_Writer_Excel2007
  23.  * @copyright  Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
  24.  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
  25.  * @version    1.7.6, 2011-02-27
  26.  */
  27.  
  28.  
  29. /**
  30.  * PHPExcel_Writer_Excel2007_ContentTypes
  31.  *
  32.  * @category   PHPExcel
  33.  * @package    PHPExcel_Writer_Excel2007
  34.  * @copyright  Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
  35.  */
  36. {
  37.     /**
  38.      * Write content types to XML format
  39.      *
  40.      * @param     PHPExcel $pPHPExcel 
  41.      * @return     string                         XML Output
  42.      * @throws     Exception
  43.      */
  44.     public function writeContentTypes(PHPExcel $pPHPExcel null)
  45.     {
  46.         // Create XML writer
  47.         $objWriter null;
  48.         if ($this->getParentWriter()->getUseDiskCaching()) {
  49.             $objWriter new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK$this->getParentWriter()->getDiskCachingDirectory());
  50.         else {
  51.             $objWriter new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
  52.         }
  53.  
  54.         // XML header
  55.         $objWriter->startDocument('1.0','UTF-8','yes');
  56.  
  57.         // Types
  58.         $objWriter->startElement('Types');
  59.         $objWriter->writeAttribute('xmlns''http://schemas.openxmlformats.org/package/2006/content-types');
  60.  
  61.             // Theme
  62.             $this->_writeOverrideContentType(
  63.                 $objWriter'/xl/theme/theme1.xml''application/vnd.openxmlformats-officedocument.theme+xml'
  64.             );
  65.  
  66.             // Styles
  67.             $this->_writeOverrideContentType(
  68.                 $objWriter'/xl/styles.xml''application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml'
  69.             );
  70.  
  71.             // Rels
  72.             $this->_writeDefaultContentType(
  73.                 $objWriter'rels''application/vnd.openxmlformats-package.relationships+xml'
  74.             );
  75.  
  76.             // XML
  77.             $this->_writeDefaultContentType(
  78.                 $objWriter'xml''application/xml'
  79.             );
  80.  
  81.             // VML
  82.             $this->_writeDefaultContentType(
  83.                 $objWriter'vml''application/vnd.openxmlformats-officedocument.vmlDrawing'
  84.             );
  85.  
  86.             // Workbook
  87.             $this->_writeOverrideContentType(
  88.                 $objWriter'/xl/workbook.xml''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml'
  89.             );
  90.  
  91.             // DocProps
  92.             $this->_writeOverrideContentType(
  93.                 $objWriter'/docProps/app.xml''application/vnd.openxmlformats-officedocument.extended-properties+xml'
  94.             );
  95.  
  96.             $this->_writeOverrideContentType(
  97.                 $objWriter'/docProps/core.xml''application/vnd.openxmlformats-package.core-properties+xml'
  98.             );
  99.  
  100.             $customPropertyList $pPHPExcel->getProperties()->getCustomProperties();
  101.             if (count($customPropertyList0{
  102.                 $this->_writeOverrideContentType(
  103.                     $objWriter'/docProps/custom.xml''application/vnd.openxmlformats-officedocument.custom-properties+xml'
  104.                 );
  105.             }
  106.  
  107.             // Worksheets
  108.             $sheetCount $pPHPExcel->getSheetCount();
  109.             for ($i 0$i $sheetCount++$i{
  110.                 $this->_writeOverrideContentType(
  111.                     $objWriter'/xl/worksheets/sheet' ($i 1'.xml''application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml'
  112.                 );
  113.             }
  114.  
  115.             // Shared strings
  116.             $this->_writeOverrideContentType(
  117.                 $objWriter'/xl/sharedStrings.xml''application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml'
  118.             );
  119.  
  120.             // Add worksheet relationship content types
  121.             for ($i 0$i $sheetCount++$i{
  122.                 if ($pPHPExcel->getSheet($i)->getDrawingCollection()->count(0{
  123.                     $this->_writeOverrideContentType(
  124.                         $objWriter'/xl/drawings/drawing' ($i 1'.xml''application/vnd.openxmlformats-officedocument.drawing+xml'
  125.                     );
  126.                 }
  127.             }
  128.  
  129.             // Comments
  130.             for ($i 0$i $sheetCount++$i{
  131.                 if (count($pPHPExcel->getSheet($i)->getComments()) 0{
  132.                     $this->_writeOverrideContentType(
  133.                         $objWriter'/xl/comments' ($i 1'.xml''application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml'
  134.                     );
  135.                 }
  136.             }
  137.  
  138.             // Add media content-types
  139.             $aMediaContentTypes array();
  140.             $mediaCount $this->getParentWriter()->getDrawingHashTable()->count();
  141.             for ($i 0$i $mediaCount++$i{
  142.                 $extension     '';
  143.                 $mimeType     '';
  144.  
  145.                 if ($this->getParentWriter()->getDrawingHashTable()->getByIndex($iinstanceof PHPExcel_Worksheet_Drawing{
  146.                     $extension     strtolower($this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getExtension());
  147.                     $mimeType     $this->_getImageMimeType$this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getPath() );
  148.                 else if ($this->getParentWriter()->getDrawingHashTable()->getByIndex($iinstanceof PHPExcel_Worksheet_MemoryDrawing{
  149.                     $extension     strtolower($this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getMimeType());
  150.                     $extension     explode('/'$extension);
  151.                     $extension     $extension[1];
  152.  
  153.                     $mimeType     $this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getMimeType();
  154.                 }
  155.  
  156.                 if (!isset$aMediaContentTypes[$extension]) ) {
  157.                         $aMediaContentTypes[$extension$mimeType;
  158.  
  159.                         $this->_writeDefaultContentType(
  160.                             $objWriter$extension$mimeType
  161.                         );
  162.                 }
  163.             }
  164.  
  165.             $sheetCount $pPHPExcel->getSheetCount();
  166.             for ($i 0$i $sheetCount++$i{
  167.                 if (count($pPHPExcel->getSheet()->getHeaderFooter()->getImages()) 0{
  168.                     foreach ($pPHPExcel->getSheet()->getHeaderFooter()->getImages(as $image{
  169.                         if (!isset$aMediaContentTypes[strtolower($image->getExtension())]) ) {
  170.                             $aMediaContentTypes[strtolower($image->getExtension())$this->_getImageMimeType$image->getPath() );
  171.  
  172.                             $this->_writeDefaultContentType(
  173.                                 $objWriterstrtolower($image->getExtension())$aMediaContentTypes[strtolower($image->getExtension())]
  174.                             );
  175.                         }
  176.                     }
  177.                 }
  178.             }
  179.  
  180.         $objWriter->endElement();
  181.  
  182.         // Return
  183.         return $objWriter->getData();
  184.     }
  185.  
  186.     /**
  187.      * Get image mime type
  188.      *
  189.      * @param     string    $pFile    Filename
  190.      * @return     string    Mime Type
  191.      * @throws     Exception
  192.      */
  193.     private function _getImageMimeType($pFile '')
  194.     {
  195.         if (PHPExcel_Shared_File::file_exists($pFile)) {
  196.             $image getimagesize($pFile);
  197.             return image_type_to_mime_type($image[2]);
  198.         else {
  199.             throw new Exception("File $pFile does not exist");
  200.         }
  201.     }
  202.  
  203.     /**
  204.      * Write Default content type
  205.      *
  206.      * @param     PHPExcel_Shared_XMLWriter     $objWriter         XML Writer
  207.      * @param     string                         $pPartname         Part name
  208.      * @param     string                         $pContentType     Content type
  209.      * @throws     Exception
  210.      */
  211.     private function _writeDefaultContentType(PHPExcel_Shared_XMLWriter $objWriter null$pPartname ''$pContentType '')
  212.     {
  213.         if ($pPartname != '' && $pContentType != ''{
  214.             // Write content type
  215.             $objWriter->startElement('Default');
  216.             $objWriter->writeAttribute('Extension',     $pPartname);
  217.             $objWriter->writeAttribute('ContentType',     $pContentType);
  218.             $objWriter->endElement();
  219.         else {
  220.             throw new Exception("Invalid parameters passed.");
  221.         }
  222.     }
  223.  
  224.     /**
  225.      * Write Override content type
  226.      *
  227.      * @param     PHPExcel_Shared_XMLWriter     $objWriter         XML Writer
  228.      * @param     string                         $pPartname         Part name
  229.      * @param     string                         $pContentType     Content type
  230.      * @throws     Exception
  231.      */
  232.     private function _writeOverrideContentType(PHPExcel_Shared_XMLWriter $objWriter null$pPartname ''$pContentType '')
  233.     {
  234.         if ($pPartname != '' && $pContentType != ''{
  235.             // Write content type
  236.             $objWriter->startElement('Override');
  237.             $objWriter->writeAttribute('PartName',         $pPartname);
  238.             $objWriter->writeAttribute('ContentType',     $pContentType);
  239.             $objWriter->endElement();
  240.         else {
  241.             throw new Exception("Invalid parameters passed.");
  242.         }
  243.     }
  244. }

Documentation generated on Sun, 27 Feb 2011 16:29:12 -0800 by phpDocumentor 1.4.3