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

Source for file Drawing.php

Documentation is available at Drawing.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_Drawing
  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 drawings to XML format
  39.      *
  40.      * @param     PHPExcel_Worksheet                $pWorksheet 
  41.      * @return     string                                 XML Output
  42.      * @throws     Exception
  43.      */
  44.     public function writeDrawings(PHPExcel_Worksheet $pWorksheet 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.         // xdr:wsDr
  58.         $objWriter->startElement('xdr:wsDr');
  59.         $objWriter->writeAttribute('xmlns:xdr''http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing');
  60.         $objWriter->writeAttribute('xmlns:a''http://schemas.openxmlformats.org/drawingml/2006/main');
  61.  
  62.             // Loop through images and write drawings
  63.             $i 1;
  64.             $iterator $pWorksheet->getDrawingCollection()->getIterator();
  65.             while ($iterator->valid()) {
  66.                 $this->_writeDrawing($objWriter$iterator->current()$i);
  67.  
  68.                 $iterator->next();
  69.                 ++$i;
  70.             }
  71.  
  72.         $objWriter->endElement();
  73.  
  74.         // Return
  75.         return $objWriter->getData();
  76.     }
  77.  
  78.     /**
  79.      * Write drawings to XML format
  80.      *
  81.      * @param     PHPExcel_Shared_XMLWriter            $objWriter         XML Writer
  82.      * @param     PHPExcel_Worksheet_BaseDrawing        $pDrawing 
  83.      * @param     int                                    $pRelationId 
  84.      * @throws     Exception
  85.      */
  86.     public function _writeDrawing(PHPExcel_Shared_XMLWriter $objWriter nullPHPExcel_Worksheet_BaseDrawing $pDrawing null$pRelationId = -1)
  87.     {
  88.         if ($pRelationId >= 0{
  89.             // xdr:oneCellAnchor
  90.             $objWriter->startElement('xdr:oneCellAnchor');
  91.                 // Image location
  92.                 $aCoordinates         PHPExcel_Cell::coordinateFromString($pDrawing->getCoordinates());
  93.                 $aCoordinates[0]     PHPExcel_Cell::columnIndexFromString($aCoordinates[0]);
  94.  
  95.                 // xdr:from
  96.                 $objWriter->startElement('xdr:from');
  97.                     $objWriter->writeElement('xdr:col'$aCoordinates[01);
  98.                     $objWriter->writeElement('xdr:colOff'PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getOffsetX()));
  99.                     $objWriter->writeElement('xdr:row'$aCoordinates[11);
  100.                     $objWriter->writeElement('xdr:rowOff'PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getOffsetY()));
  101.                 $objWriter->endElement();
  102.  
  103.                 // xdr:ext
  104.                 $objWriter->startElement('xdr:ext');
  105.                     $objWriter->writeAttribute('cx'PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getWidth()));
  106.                     $objWriter->writeAttribute('cy'PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getHeight()));
  107.                 $objWriter->endElement();
  108.  
  109.                 // xdr:pic
  110.                 $objWriter->startElement('xdr:pic');
  111.  
  112.                     // xdr:nvPicPr
  113.                     $objWriter->startElement('xdr:nvPicPr');
  114.  
  115.                         // xdr:cNvPr
  116.                         $objWriter->startElement('xdr:cNvPr');
  117.                         $objWriter->writeAttribute('id'$pRelationId);
  118.                         $objWriter->writeAttribute('name'$pDrawing->getName());
  119.                         $objWriter->writeAttribute('descr'$pDrawing->getDescription());
  120.                         $objWriter->endElement();
  121.  
  122.                         // xdr:cNvPicPr
  123.                         $objWriter->startElement('xdr:cNvPicPr');
  124.  
  125.                             // a:picLocks
  126.                             $objWriter->startElement('a:picLocks');
  127.                             $objWriter->writeAttribute('noChangeAspect''1');
  128.                             $objWriter->endElement();
  129.  
  130.                         $objWriter->endElement();
  131.  
  132.                     $objWriter->endElement();
  133.  
  134.                     // xdr:blipFill
  135.                     $objWriter->startElement('xdr:blipFill');
  136.  
  137.                         // a:blip
  138.                         $objWriter->startElement('a:blip');
  139.                         $objWriter->writeAttribute('xmlns:r''http://schemas.openxmlformats.org/officeDocument/2006/relationships');
  140.                         $objWriter->writeAttribute('r:embed''rId' $pRelationId);
  141.                         $objWriter->endElement();
  142.  
  143.                         // a:stretch
  144.                         $objWriter->startElement('a:stretch');
  145.                             $objWriter->writeElement('a:fillRect'null);
  146.                         $objWriter->endElement();
  147.  
  148.                     $objWriter->endElement();
  149.  
  150.                     // xdr:spPr
  151.                     $objWriter->startElement('xdr:spPr');
  152.  
  153.                         // a:xfrm
  154.                         $objWriter->startElement('a:xfrm');
  155.                         $objWriter->writeAttribute('rot'PHPExcel_Shared_Drawing::degreesToAngle($pDrawing->getRotation()));
  156.                         $objWriter->endElement();
  157.  
  158.                         // a:prstGeom
  159.                         $objWriter->startElement('a:prstGeom');
  160.                         $objWriter->writeAttribute('prst''rect');
  161.  
  162.                             // a:avLst
  163.                             $objWriter->writeElement('a:avLst'null);
  164.  
  165.                         $objWriter->endElement();
  166.  
  167. //                        // a:solidFill
  168. //                        $objWriter->startElement('a:solidFill');
  169.  
  170. //                            // a:srgbClr
  171. //                            $objWriter->startElement('a:srgbClr');
  172. //                            $objWriter->writeAttribute('val', 'FFFFFF');
  173.  
  174. ///* SHADE
  175. //                                // a:shade
  176. //                                $objWriter->startElement('a:shade');
  177. //                                $objWriter->writeAttribute('val', '85000');
  178. //                                $objWriter->endElement();
  179. //*/
  180.  
  181. //                            $objWriter->endElement();
  182.  
  183. //                        $objWriter->endElement();
  184. /*
  185.                         // a:ln
  186.                         $objWriter->startElement('a:ln');
  187.                         $objWriter->writeAttribute('w', '88900');
  188.                         $objWriter->writeAttribute('cap', 'sq');
  189.  
  190.                             // a:solidFill
  191.                             $objWriter->startElement('a:solidFill');
  192.  
  193.                                 // a:srgbClr
  194.                                 $objWriter->startElement('a:srgbClr');
  195.                                 $objWriter->writeAttribute('val', 'FFFFFF');
  196.                                 $objWriter->endElement();
  197.  
  198.                             $objWriter->endElement();
  199.  
  200.                             // a:miter
  201.                             $objWriter->startElement('a:miter');
  202.                             $objWriter->writeAttribute('lim', '800000');
  203.                             $objWriter->endElement();
  204.  
  205.                         $objWriter->endElement();
  206. */
  207.  
  208.                         if ($pDrawing->getShadow()->getVisible()) {
  209.                             // a:effectLst
  210.                             $objWriter->startElement('a:effectLst');
  211.  
  212.                                 // a:outerShdw
  213.                                 $objWriter->startElement('a:outerShdw');
  214.                                 $objWriter->writeAttribute('blurRad',         PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getShadow()->getBlurRadius()));
  215.                                 $objWriter->writeAttribute('dist',            PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getShadow()->getDistance()));
  216.                                 $objWriter->writeAttribute('dir',            PHPExcel_Shared_Drawing::degreesToAngle($pDrawing->getShadow()->getDirection()));
  217.                                 $objWriter->writeAttribute('algn',            $pDrawing->getShadow()->getAlignment());
  218.                                 $objWriter->writeAttribute('rotWithShape',     '0');
  219.  
  220.                                     // a:srgbClr
  221.                                     $objWriter->startElement('a:srgbClr');
  222.                                     $objWriter->writeAttribute('val',        $pDrawing->getShadow()->getColor()->getRGB());
  223.  
  224.                                         // a:alpha
  225.                                         $objWriter->startElement('a:alpha');
  226.                                         $objWriter->writeAttribute('val',     $pDrawing->getShadow()->getAlpha(1000);
  227.                                         $objWriter->endElement();
  228.  
  229.                                     $objWriter->endElement();
  230.  
  231.                                 $objWriter->endElement();
  232.  
  233.                             $objWriter->endElement();
  234.                         }
  235. /*
  236.  
  237.                         // a:scene3d
  238.                         $objWriter->startElement('a:scene3d');
  239.  
  240.                             // a:camera
  241.                             $objWriter->startElement('a:camera');
  242.                             $objWriter->writeAttribute('prst', 'orthographicFront');
  243.                             $objWriter->endElement();
  244.  
  245.                             // a:lightRig
  246.                             $objWriter->startElement('a:lightRig');
  247.                             $objWriter->writeAttribute('rig', 'twoPt');
  248.                             $objWriter->writeAttribute('dir', 't');
  249.  
  250.                                 // a:rot
  251.                                 $objWriter->startElement('a:rot');
  252.                                 $objWriter->writeAttribute('lat', '0');
  253.                                 $objWriter->writeAttribute('lon', '0');
  254.                                 $objWriter->writeAttribute('rev', '0');
  255.                                 $objWriter->endElement();
  256.  
  257.                             $objWriter->endElement();
  258.  
  259.                         $objWriter->endElement();
  260. */
  261. /*
  262.                         // a:sp3d
  263.                         $objWriter->startElement('a:sp3d');
  264.  
  265.                             // a:bevelT
  266.                             $objWriter->startElement('a:bevelT');
  267.                             $objWriter->writeAttribute('w', '25400');
  268.                             $objWriter->writeAttribute('h', '19050');
  269.                             $objWriter->endElement();
  270.  
  271.                             // a:contourClr
  272.                             $objWriter->startElement('a:contourClr');
  273.  
  274.                                 // a:srgbClr
  275.                                 $objWriter->startElement('a:srgbClr');
  276.                                 $objWriter->writeAttribute('val', 'FFFFFF');
  277.                                 $objWriter->endElement();
  278.  
  279.                             $objWriter->endElement();
  280.  
  281.                         $objWriter->endElement();
  282. */
  283.                     $objWriter->endElement();
  284.  
  285.                 $objWriter->endElement();
  286.  
  287.                 // xdr:clientData
  288.                 $objWriter->writeElement('xdr:clientData'null);
  289.  
  290.             $objWriter->endElement();
  291.         else {
  292.             throw new Exception("Invalid parameters passed.");
  293.         }
  294.     }
  295.  
  296.     /**
  297.      * Write VML header/footer images to XML format
  298.      *
  299.      * @param     PHPExcel_Worksheet                $pWorksheet 
  300.      * @return     string                                 XML Output
  301.      * @throws     Exception
  302.      */
  303.     public function writeVMLHeaderFooterImages(PHPExcel_Worksheet $pWorksheet null)
  304.     {
  305.         // Create XML writer
  306.         $objWriter null;
  307.         if ($this->getParentWriter()->getUseDiskCaching()) {
  308.             $objWriter new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK$this->getParentWriter()->getDiskCachingDirectory());
  309.         else {
  310.             $objWriter new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
  311.         }
  312.  
  313.         // XML header
  314.         $objWriter->startDocument('1.0','UTF-8','yes');
  315.  
  316.           // Header/footer images
  317.           $images $pWorksheet->getHeaderFooter()->getImages();
  318.  
  319.         // xml
  320.         $objWriter->startElement('xml');
  321.         $objWriter->writeAttribute('xmlns:v''urn:schemas-microsoft-com:vml');
  322.         $objWriter->writeAttribute('xmlns:o''urn:schemas-microsoft-com:office:office');
  323.         $objWriter->writeAttribute('xmlns:x''urn:schemas-microsoft-com:office:excel');
  324.  
  325.             // o:shapelayout
  326.             $objWriter->startElement('o:shapelayout');
  327.             $objWriter->writeAttribute('v:ext',         'edit');
  328.  
  329.                 // o:idmap
  330.                 $objWriter->startElement('o:idmap');
  331.                 $objWriter->writeAttribute('v:ext',     'edit');
  332.                 $objWriter->writeAttribute('data',         '1');
  333.                 $objWriter->endElement();
  334.  
  335.             $objWriter->endElement();
  336.  
  337.             // v:shapetype
  338.             $objWriter->startElement('v:shapetype');
  339.             $objWriter->writeAttribute('id',                     '_x0000_t75');
  340.             $objWriter->writeAttribute('coordsize',             '21600,21600');
  341.             $objWriter->writeAttribute('o:spt',                 '75');
  342.             $objWriter->writeAttribute('o:preferrelative',         't');
  343.             $objWriter->writeAttribute('path',                     'm@4@5l@4@11@9@11@9@5xe');
  344.             $objWriter->writeAttribute('filled',                 'f');
  345.             $objWriter->writeAttribute('stroked',                 'f');
  346.  
  347.                 // v:stroke
  348.                 $objWriter->startElement('v:stroke');
  349.                 $objWriter->writeAttribute('joinstyle',         'miter');
  350.                 $objWriter->endElement();
  351.  
  352.                 // v:formulas
  353.                 $objWriter->startElement('v:formulas');
  354.  
  355.                     // v:f
  356.                     $objWriter->startElement('v:f');
  357.                     $objWriter->writeAttribute('eqn',         'if lineDrawn pixelLineWidth 0');
  358.                     $objWriter->endElement();
  359.  
  360.                     // v:f
  361.                     $objWriter->startElement('v:f');
  362.                     $objWriter->writeAttribute('eqn',         'sum @0 1 0');
  363.                     $objWriter->endElement();
  364.  
  365.                     // v:f
  366.                     $objWriter->startElement('v:f');
  367.                     $objWriter->writeAttribute('eqn',         'sum 0 0 @1');
  368.                     $objWriter->endElement();
  369.  
  370.                     // v:f
  371.                     $objWriter->startElement('v:f');
  372.                     $objWriter->writeAttribute('eqn',         'prod @2 1 2');
  373.                     $objWriter->endElement();
  374.  
  375.                     // v:f
  376.                     $objWriter->startElement('v:f');
  377.                     $objWriter->writeAttribute('eqn',         'prod @3 21600 pixelWidth');
  378.                     $objWriter->endElement();
  379.  
  380.                     // v:f
  381.                     $objWriter->startElement('v:f');
  382.                     $objWriter->writeAttribute('eqn',         'prod @3 21600 pixelHeight');
  383.                     $objWriter->endElement();
  384.  
  385.                     // v:f
  386.                     $objWriter->startElement('v:f');
  387.                     $objWriter->writeAttribute('eqn',         'sum @0 0 1');
  388.                     $objWriter->endElement();
  389.  
  390.                     // v:f
  391.                     $objWriter->startElement('v:f');
  392.                     $objWriter->writeAttribute('eqn',         'prod @6 1 2');
  393.                     $objWriter->endElement();
  394.  
  395.                     // v:f
  396.                     $objWriter->startElement('v:f');
  397.                     $objWriter->writeAttribute('eqn',         'prod @7 21600 pixelWidth');
  398.                     $objWriter->endElement();
  399.  
  400.                     // v:f
  401.                     $objWriter->startElement('v:f');
  402.                     $objWriter->writeAttribute('eqn',         'sum @8 21600 0');
  403.                     $objWriter->endElement();
  404.  
  405.                     // v:f
  406.                     $objWriter->startElement('v:f');
  407.                     $objWriter->writeAttribute('eqn',         'prod @7 21600 pixelHeight');
  408.                     $objWriter->endElement();
  409.  
  410.                     // v:f
  411.                     $objWriter->startElement('v:f');
  412.                     $objWriter->writeAttribute('eqn',         'sum @10 21600 0');
  413.                     $objWriter->endElement();
  414.  
  415.                 $objWriter->endElement();
  416.  
  417.                 // v:path
  418.                 $objWriter->startElement('v:path');
  419.                 $objWriter->writeAttribute('o:extrusionok',     'f');
  420.                 $objWriter->writeAttribute('gradientshapeok',     't');
  421.                 $objWriter->writeAttribute('o:connecttype',     'rect');
  422.                 $objWriter->endElement();
  423.  
  424.                 // o:lock
  425.                 $objWriter->startElement('o:lock');
  426.                 $objWriter->writeAttribute('v:ext',             'edit');
  427.                 $objWriter->writeAttribute('aspectratio',         't');
  428.                 $objWriter->endElement();
  429.  
  430.             $objWriter->endElement();
  431.  
  432.             // Loop through images
  433.             foreach ($images as $key => $value{
  434.                 $this->_writeVMLHeaderFooterImage($objWriter$key$value);
  435.             }
  436.  
  437.         $objWriter->endElement();
  438.  
  439.         // Return
  440.         return $objWriter->getData();
  441.     }
  442.  
  443.     /**
  444.      * Write VML comment to XML format
  445.      *
  446.      * @param     PHPExcel_Shared_XMLWriter        $objWriter             XML Writer
  447.      * @param    string                            $pReference            Reference
  448.      * @param     PHPExcel_Worksheet_HeaderFooterDrawing    $pImage        Image
  449.      * @throws     Exception
  450.      */
  451.     public function _writeVMLHeaderFooterImage(PHPExcel_Shared_XMLWriter $objWriter null$pReference ''PHPExcel_Worksheet_HeaderFooterDrawing $pImage null)
  452.     {
  453.         // Calculate object id
  454.         preg_match('{(\d+)}'md5($pReference)$m);
  455.         $id 1500 (substr($m[1]021);
  456.  
  457.         // Calculate offset
  458.         $width $pImage->getWidth();
  459.         $height $pImage->getHeight();
  460.         $marginLeft $pImage->getOffsetX();
  461.         $marginTop $pImage->getOffsetY();
  462.  
  463.         // v:shape
  464.         $objWriter->startElement('v:shape');
  465.         $objWriter->writeAttribute('id',             $pReference);
  466.         $objWriter->writeAttribute('o:spid',         '_x0000_s' $id);
  467.         $objWriter->writeAttribute('type',             '#_x0000_t75');
  468.         $objWriter->writeAttribute('style',         "position:absolute;margin-left:{$marginLeft}px;margin-top:{$marginTop}px;width:{$width}px;height:{$height}px;z-index:1");
  469.  
  470.             // v:imagedata
  471.             $objWriter->startElement('v:imagedata');
  472.             $objWriter->writeAttribute('o:relid',         'rId' $pReference);
  473.             $objWriter->writeAttribute('o:title',         $pImage->getName());
  474.             $objWriter->endElement();
  475.  
  476.             // o:lock
  477.             $objWriter->startElement('o:lock');
  478.             $objWriter->writeAttribute('v:ext',         'edit');
  479.             $objWriter->writeAttribute('rotation',         't');
  480.             $objWriter->endElement();
  481.  
  482.         $objWriter->endElement();
  483.     }
  484.  
  485.  
  486.     /**
  487.      * Get an array of all drawings
  488.      *
  489.      * @param     PHPExcel                            $pPHPExcel 
  490.      * @return     PHPExcel_Worksheet_Drawing[]        All drawings in PHPExcel
  491.      * @throws     Exception
  492.      */
  493.     public function allDrawings(PHPExcel $pPHPExcel null)
  494.     {
  495.         // Get an array of all drawings
  496.         $aDrawings    array();
  497.  
  498.         // Loop through PHPExcel
  499.         $sheetCount $pPHPExcel->getSheetCount();
  500.         for ($i 0$i $sheetCount++$i{
  501.             // Loop through images and add to array
  502.             $iterator $pPHPExcel->getSheet($i)->getDrawingCollection()->getIterator();
  503.             while ($iterator->valid()) {
  504.                 $aDrawings[$iterator->current();
  505.  
  506.                   $iterator->next();
  507.             }
  508.         }
  509.  
  510.         return $aDrawings;
  511.     }
  512. }

Documentation generated on Sun, 27 Feb 2011 16:30:15 -0800 by phpDocumentor 1.4.3