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

Documentation generated on Wed, 22 Apr 2009 08:56:50 +0200 by phpDocumentor 1.4.1