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

Documentation generated on Mon, 27 Oct 2008 08:38:19 +0100 by phpDocumentor 1.4.1