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 - 2010 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 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  24.  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
  25.  * @version    1.7.3c, 2010-06-01
  26.  */
  27.  
  28.  
  29. /**
  30.  * PHPExcel_Writer_Excel2007_ContentTypes
  31.  *
  32.  * @category   PHPExcel
  33.  * @package    PHPExcel_Writer_Excel2007
  34.  * @copyright  Copyright (c) 2006 - 2010 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.             // Worksheets
  101.             $sheetCount $pPHPExcel->getSheetCount();
  102.             for ($i 0$i $sheetCount++$i{
  103.                 $this->_writeOverrideContentType(
  104.                     $objWriter'/xl/worksheets/sheet' ($i 1'.xml''application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml'
  105.                 );
  106.             }
  107.  
  108.             // Shared strings
  109.             $this->_writeOverrideContentType(
  110.                 $objWriter'/xl/sharedStrings.xml''application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml'
  111.             );
  112.  
  113.             // Add worksheet relationship content types
  114.             for ($i 0$i $sheetCount++$i{
  115.                 if ($pPHPExcel->getSheet($i)->getDrawingCollection()->count(0{
  116.                     $this->_writeOverrideContentType(
  117.                         $objWriter'/xl/drawings/drawing' ($i 1'.xml''application/vnd.openxmlformats-officedocument.drawing+xml'
  118.                     );
  119.                 }
  120.             }
  121.  
  122.             // Comments
  123.             for ($i 0$i $sheetCount++$i{
  124.                 if (count($pPHPExcel->getSheet($i)->getComments()) 0{
  125.                     $this->_writeOverrideContentType(
  126.                         $objWriter'/xl/comments' ($i 1'.xml''application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml'
  127.                     );
  128.                 }
  129.             }
  130.  
  131.             // Add media content-types
  132.             $aMediaContentTypes array();
  133.             $mediaCount $this->getParentWriter()->getDrawingHashTable()->count();
  134.             for ($i 0$i $mediaCount++$i{
  135.                 $extension     '';
  136.                 $mimeType     '';
  137.  
  138.                 if ($this->getParentWriter()->getDrawingHashTable()->getByIndex($iinstanceof PHPExcel_Worksheet_Drawing{
  139.                     $extension     strtolower($this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getExtension());
  140.                     $mimeType     $this->_getImageMimeType$this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getPath() );
  141.                 else if ($this->getParentWriter()->getDrawingHashTable()->getByIndex($iinstanceof PHPExcel_Worksheet_MemoryDrawing{
  142.                     $extension     strtolower($this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getMimeType());
  143.                     $extension     explode('/'$extension);
  144.                     $extension     $extension[1];
  145.  
  146.                     $mimeType     $this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getMimeType();
  147.                 }
  148.  
  149.                 if (!isset$aMediaContentTypes[$extension]) ) {
  150.                         $aMediaContentTypes[$extension$mimeType;
  151.  
  152.                         $this->_writeDefaultContentType(
  153.                             $objWriter$extension$mimeType
  154.                         );
  155.                 }
  156.             }
  157.  
  158.             $sheetCount $pPHPExcel->getSheetCount();
  159.             for ($i 0$i $sheetCount++$i{
  160.                 if (count($pPHPExcel->getSheet()->getHeaderFooter()->getImages()) 0{
  161.                     foreach ($pPHPExcel->getSheet()->getHeaderFooter()->getImages(as $image{
  162.                         if (!isset$aMediaContentTypes[strtolower($image->getExtension())]) ) {
  163.                             $aMediaContentTypes[strtolower($image->getExtension())$this->_getImageMimeType$image->getPath() );
  164.  
  165.                             $this->_writeDefaultContentType(
  166.                                 $objWriterstrtolower($image->getExtension())$aMediaContentTypes[strtolower($image->getExtension())]
  167.                             );
  168.                         }
  169.                     }
  170.                 }
  171.             }
  172.  
  173.         $objWriter->endElement();
  174.  
  175.         // Return
  176.         return $objWriter->getData();
  177.     }
  178.  
  179.     /**
  180.      * Get image mime type
  181.      *
  182.      * @param     string    $pFile    Filename
  183.      * @return     string    Mime Type
  184.      * @throws     Exception
  185.      */
  186.     private function _getImageMimeType($pFile '')
  187.     {
  188.         if (PHPExcel_Shared_File::file_exists($pFile)) {
  189.             $image getimagesize($pFile);
  190.             return image_type_to_mime_type($image[2]);
  191.         else {
  192.             throw new Exception("File $pFile does not exist");
  193.         }
  194.     }
  195.  
  196.     /**
  197.      * Write Default content type
  198.      *
  199.      * @param     PHPExcel_Shared_XMLWriter     $objWriter         XML Writer
  200.      * @param     string                         $pPartname         Part name
  201.      * @param     string                         $pContentType     Content type
  202.      * @throws     Exception
  203.      */
  204.     private function _writeDefaultContentType(PHPExcel_Shared_XMLWriter $objWriter null$pPartname ''$pContentType '')
  205.     {
  206.         if ($pPartname != '' && $pContentType != ''{
  207.             // Write content type
  208.             $objWriter->startElement('Default');
  209.             $objWriter->writeAttribute('Extension',     $pPartname);
  210.             $objWriter->writeAttribute('ContentType',     $pContentType);
  211.             $objWriter->endElement();
  212.         else {
  213.             throw new Exception("Invalid parameters passed.");
  214.         }
  215.     }
  216.  
  217.     /**
  218.      * Write Override content type
  219.      *
  220.      * @param     PHPExcel_Shared_XMLWriter     $objWriter         XML Writer
  221.      * @param     string                         $pPartname         Part name
  222.      * @param     string                         $pContentType     Content type
  223.      * @throws     Exception
  224.      */
  225.     private function _writeOverrideContentType(PHPExcel_Shared_XMLWriter $objWriter null$pPartname ''$pContentType '')
  226.     {
  227.         if ($pPartname != '' && $pContentType != ''{
  228.             // Write content type
  229.             $objWriter->startElement('Override');
  230.             $objWriter->writeAttribute('PartName',         $pPartname);
  231.             $objWriter->writeAttribute('ContentType',     $pContentType);
  232.             $objWriter->endElement();
  233.         else {
  234.             throw new Exception("Invalid parameters passed.");
  235.         }
  236.     }
  237. }

Documentation generated on Tue, 01 Jun 2010 17:02:38 +0200 by phpDocumentor 1.4.3