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

Documentation generated on Mon, 27 Oct 2008 08:37:54 +0100 by phpDocumentor 1.4.1