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

Documentation generated on Mon, 10 Aug 2009 08:02:54 +0200 by phpDocumentor 1.4.1