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

Source for file Slide.php

Documentation is available at Slide.php

  1. <?php
  2. /**
  3.  * PHPPowerPoint
  4.  *
  5.  * Copyright (c) 2009 - 2010 PHPPowerPoint
  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   PHPPowerPoint
  22.  * @package    PHPPowerPoint_Writer_PowerPoint2007
  23.  * @copyright  Copyright (c) 2009 - 2010 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
  24.  * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
  25.  * @version    0.1.0, 2009-04-27
  26.  */
  27.  
  28.  
  29. /** PHPPowerPoint_Writer_PowerPoint2007 */
  30. require_once 'PHPPowerPoint/Writer/PowerPoint2007.php';
  31.  
  32. /** PHPPowerPoint_Writer_PowerPoint2007_WriterPart */
  33. require_once 'PHPPowerPoint/Writer/PowerPoint2007/WriterPart.php';
  34.  
  35. /** PHPPowerPoint_Slide */
  36. require_once 'PHPPowerPoint/Slide.php';
  37.  
  38. /** PHPPowerPoint_Shape */
  39. require_once 'PHPPowerPoint/Shape.php';
  40.  
  41. /** PHPPowerPoint_Shape_RichText */
  42. require_once 'PHPPowerPoint/Shape/RichText.php';
  43.  
  44. /** PHPPowerPoint_Shape_BaseDrawing */
  45. require_once 'PHPPowerPoint/Shape/BaseDrawing.php';
  46.  
  47. /** PHPPowerPoint_Shape_Drawing */
  48. require_once 'PHPPowerPoint/Shape/Drawing.php';
  49.  
  50. /** PHPPowerPoint_Shape_MemoryDrawing */
  51. require_once 'PHPPowerPoint/Shape/MemoryDrawing.php';
  52.  
  53. /** PHPPowerPoint_Shared_Font */
  54. require_once 'PHPPowerPoint/Shared/Font.php';
  55.  
  56. /** PHPPowerPoint_Shared_String */
  57. require_once 'PHPPowerPoint/Shared/String.php';
  58.  
  59. /** PHPPowerPoint_Shared_XMLWriter */
  60. require_once 'PHPPowerPoint/Shared/XMLWriter.php';
  61.  
  62.  
  63. /**
  64.  * PHPPowerPoint_Writer_PowerPoint2007_Slide
  65.  *
  66.  * @category   PHPPowerPoint
  67.  * @package    PHPPowerPoint_Writer_PowerPoint2007
  68.  * @copyright  Copyright (c) 2006 - 2009 PHPPowerPoint (http://www.codeplex.com/PHPPowerPoint)
  69.  */
  70. {
  71.     /**
  72.      * Write slide to XML format
  73.      *
  74.      * @param    PHPPowerPoint_Slide        $pSlide 
  75.      * @return    string                    XML Output
  76.      * @throws    Exception
  77.      */
  78.     public function writeSlide(PHPPowerPoint_Slide $pSlide null)
  79.     {
  80.         // Check slide
  81.         if (is_null($pSlide))
  82.             throw new Exception("Invalid PHPPowerPoint_Slide object passed.");
  83.             
  84.         // Create XML writer
  85.         $objWriter null;
  86.         if ($this->getParentWriter()->getUseDiskCaching()) {
  87.             $objWriter new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK$this->getParentWriter()->getDiskCachingDirectory());
  88.         else {
  89.             $objWriter new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY);
  90.         }
  91.  
  92.         // XML header
  93.         $objWriter->startDocument('1.0','UTF-8','yes');
  94.         
  95.         // p:sld
  96.         $objWriter->startElement('p:sld');
  97.         $objWriter->writeAttribute('xmlns:a''http://schemas.openxmlformats.org/drawingml/2006/main');
  98.         $objWriter->writeAttribute('xmlns:r''http://schemas.openxmlformats.org/officeDocument/2006/relationships');
  99.         $objWriter->writeAttribute('xmlns:p''http://schemas.openxmlformats.org/presentationml/2006/main');
  100.         
  101.             // p:cSld
  102.             $objWriter->startElement('p:cSld');
  103.  
  104.                 // p:spTree
  105.                 $objWriter->startElement('p:spTree');
  106.                 
  107.                     // p:nvGrpSpPr
  108.                     $objWriter->startElement('p:nvGrpSpPr');
  109.                     
  110.                         // p:cNvPr
  111.                         $objWriter->startElement('p:cNvPr');
  112.                         $objWriter->writeAttribute('id''1');
  113.                         $objWriter->writeAttribute('name''');
  114.                         $objWriter->endElement();
  115.                         
  116.                         // p:cNvGrpSpPr
  117.                         $objWriter->writeElement('p:cNvGrpSpPr'null);
  118.                         
  119.                         // p:nvPr
  120.                         $objWriter->writeElement('p:nvPr'null);
  121.                     
  122.                     $objWriter->endElement();
  123.                     
  124.                     // p:grpSpPr
  125.                     $objWriter->startElement('p:grpSpPr');
  126.                     
  127.                         // a:xfrm
  128.                         $objWriter->startElement('a:xfrm');
  129.  
  130.                             // a:off
  131.                             $objWriter->startElement('a:off');
  132.                             $objWriter->writeAttribute('x''0');
  133.                             $objWriter->writeAttribute('y''0');
  134.                             $objWriter->endElement();
  135.                             
  136.                             // a:ext
  137.                             $objWriter->startElement('a:ext');
  138.                             $objWriter->writeAttribute('cx''0');
  139.                             $objWriter->writeAttribute('cy''0');
  140.                             $objWriter->endElement();
  141.                             
  142.                             // a:chOff
  143.                             $objWriter->startElement('a:chOff');
  144.                             $objWriter->writeAttribute('x''0');
  145.                             $objWriter->writeAttribute('y''0');
  146.                             $objWriter->endElement();
  147.                             
  148.                             // a:chExt
  149.                             $objWriter->startElement('a:chExt');
  150.                             $objWriter->writeAttribute('cx''0');
  151.                             $objWriter->writeAttribute('cy''0');
  152.                             $objWriter->endElement();
  153.                         
  154.                         $objWriter->endElement();
  155.                         
  156.                     $objWriter->endElement();
  157.                         
  158.                     // Loop shapes
  159.                     $shapeId     0;
  160.                     $relationId 1;
  161.                     $shapes     $pSlide->getShapeCollection();
  162.                     foreach ($shapes as $shape)
  163.                     {
  164.                         // Increment $shapeId
  165.                         ++$shapeId;
  166.                           
  167.                         // Check type
  168.                         if ($shape instanceof PHPPowerPoint_Shape_BaseDrawing)
  169.                         {
  170.                             // Picture --> $relationId
  171.                             ++$relationId;
  172.                             
  173.                             $this->_writePic($objWriter$shape$shapeId$relationId);
  174.                         }
  175.                         else if ($shape instanceof PHPPowerPoint_Shape_RichText)
  176.                         {
  177.                             $this->_writeTxt($objWriter$shape$shapeId);
  178.                         }
  179.                     }
  180.  
  181.                 $objWriter->endElement();
  182.                 
  183.             $objWriter->endElement();
  184.         
  185.             // p:clrMapOvr
  186.             $objWriter->startElement('p:clrMapOvr');
  187.                 
  188.                 // a:masterClrMapping
  189.                 $objWriter->writeElement('a:masterClrMapping''');
  190.  
  191.             $objWriter->endElement();
  192.     
  193.         $objWriter->endElement();
  194.         
  195.         // Return
  196.         return $objWriter->getData();
  197.     }
  198.  
  199.     /**
  200.      * Write pic
  201.      *
  202.      * @param    PHPPowerPoint_Shared_XMLWriter        $objWriter        XML Writer
  203.      * @param    PHPPowerPoint_Shape_BaseDrawing        $shape 
  204.      * @param    int                                    $shapeId 
  205.      * @param    int                                    $relationId 
  206.      * @throws    Exception
  207.      */
  208.     private function _writePic(PHPPowerPoint_Shared_XMLWriter $objWriter nullPHPPowerPoint_Shape_BaseDrawing $shape null$shapeId$relationId)
  209.     {
  210.         // p:pic
  211.         $objWriter->startElement('p:pic');
  212.         
  213.             // p:nvPicPr
  214.             $objWriter->startElement('p:nvPicPr');
  215.             
  216.                 // p:cNvPr
  217.                 $objWriter->startElement('p:cNvPr');
  218.                 $objWriter->writeAttribute('id'$shapeId);
  219.                 $objWriter->writeAttribute('name'$shape->getName());
  220.                 $objWriter->writeAttribute('descr'$shape->getDescription());
  221.                 $objWriter->endElement();
  222.                                         
  223.                 // p:cNvPicPr
  224.                 $objWriter->startElement('p:cNvPicPr');
  225.                 
  226.                     // a:picLocks
  227.                     $objWriter->startElement('a:picLocks');
  228.                     $objWriter->writeAttribute('noChangeAspect''1');
  229.                     $objWriter->endElement();
  230.                 
  231.                 $objWriter->endElement();
  232.                                     
  233.                 // p:nvPr
  234.                 $objWriter->writeElement('p:nvPr'null);
  235.                         
  236.             $objWriter->endElement();
  237.                                 
  238.             // p:blipFill
  239.             $objWriter->startElement('p:blipFill');
  240.             
  241.                 // a:blip
  242.                 $objWriter->startElement('a:blip');
  243.                 $objWriter->writeAttribute('r:embed''rId' $relationId);
  244.                 $objWriter->endElement();
  245.                 
  246.                 // a:stretch
  247.                 $objWriter->startElement('a:stretch');
  248.                     $objWriter->writeElement('a:fillRect'null);
  249.                 $objWriter->endElement();
  250.                 
  251.             $objWriter->endElement();
  252.             
  253.             // p:spPr
  254.             $objWriter->startElement('p:spPr');
  255.             
  256.                 // a:xfrm
  257.                 $objWriter->startElement('a:xfrm');
  258.                 $objWriter->writeAttribute('rot'PHPPowerPoint_Shared_Drawing::degreesToAngle($shape->getRotation()));
  259.                 
  260.                     // a:off
  261.                     $objWriter->startElement('a:off');
  262.                     $objWriter->writeAttribute('x'PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getOffsetX()));
  263.                     $objWriter->writeAttribute('y'PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getOffsetY()));
  264.                     $objWriter->endElement();
  265.                                             
  266.                     // a:ext
  267.                     $objWriter->startElement('a:ext');
  268.                     $objWriter->writeAttribute('cx'PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getWidth()));
  269.                     $objWriter->writeAttribute('cy'PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getHeight()));
  270.                     $objWriter->endElement();
  271.  
  272.                 $objWriter->endElement();
  273.                 
  274.                 // a:prstGeom
  275.                 $objWriter->startElement('a:prstGeom');
  276.                 $objWriter->writeAttribute('prst''rect');
  277.                 
  278.                     // a:avLst
  279.                     $objWriter->writeElement('a:avLst'null);
  280.                     
  281.                 $objWriter->endElement();
  282.                 
  283.                 if ($shape->getShadow()->getVisible()) {
  284.                     // a:effectLst
  285.                     $objWriter->startElement('a:effectLst');
  286.                     
  287.                         // a:outerShdw
  288.                         $objWriter->startElement('a:outerShdw');
  289.                         $objWriter->writeAttribute('blurRad',         PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getShadow()->getBlurRadius()));
  290.                         $objWriter->writeAttribute('dist',            PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getShadow()->getDistance()));
  291.                         $objWriter->writeAttribute('dir',            PHPPowerPoint_Shared_Drawing::degreesToAngle($shape->getShadow()->getDirection()));
  292.                         $objWriter->writeAttribute('algn',            $shape->getShadow()->getAlignment());
  293.                         $objWriter->writeAttribute('rotWithShape',     '0');
  294.  
  295.                             // a:srgbClr
  296.                             $objWriter->startElement('a:srgbClr');
  297.                             $objWriter->writeAttribute('val',        $shape->getShadow()->getColor()->getRGB());
  298.  
  299.                                 // a:alpha
  300.                                 $objWriter->startElement('a:alpha');
  301.                                 $objWriter->writeAttribute('val',     $shape->getShadow()->getAlpha(1000);
  302.                                 $objWriter->endElement();
  303.  
  304.                             $objWriter->endElement();
  305.  
  306.                         $objWriter->endElement();
  307.  
  308.                     $objWriter->endElement();
  309.                 }
  310.                                         
  311.             $objWriter->endElement();
  312.                 
  313.         $objWriter->endElement();
  314.     }
  315.     
  316.     /**
  317.      * Write txt
  318.      *
  319.      * @param    PHPPowerPoint_Shared_XMLWriter        $objWriter        XML Writer
  320.      * @param    PHPPowerPoint_Shape_RichText        $shape 
  321.      * @param    int                                    $shapeId 
  322.      * @throws    Exception
  323.      */
  324.     private function _writeTxt(PHPPowerPoint_Shared_XMLWriter $objWriter nullPHPPowerPoint_Shape_RichText $shape null$shapeId)
  325.     {
  326.         // p:sp
  327.         $objWriter->startElement('p:sp');
  328.         
  329.             // p:nvSpPr
  330.             $objWriter->startElement('p:nvSpPr');
  331.             
  332.                 // p:cNvPr
  333.                 $objWriter->startElement('p:cNvPr');
  334.                 $objWriter->writeAttribute('id'$shapeId);
  335.                 $objWriter->writeAttribute('name''');
  336.                 $objWriter->endElement();
  337.                                         
  338.                 // p:cNvSpPr
  339.                 $objWriter->startElement('p:cNvSpPr');
  340.                 $objWriter->writeAttribute('txBox''1');
  341.                 $objWriter->endElement();
  342.                                     
  343.                 // p:nvPr
  344.                 $objWriter->writeElement('p:nvPr'null);
  345.                         
  346.             $objWriter->endElement();
  347.             
  348.             // p:spPr
  349.             $objWriter->startElement('p:spPr');
  350.             
  351.                 // a:xfrm
  352.                 $objWriter->startElement('a:xfrm');
  353.                 $objWriter->writeAttribute('rot'PHPPowerPoint_Shared_Drawing::degreesToAngle($shape->getRotation()));
  354.                 
  355.                     // a:off
  356.                     $objWriter->startElement('a:off');
  357.                     $objWriter->writeAttribute('x'PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getOffsetX()));
  358.                     $objWriter->writeAttribute('y'PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getOffsetY()));
  359.                     $objWriter->endElement();
  360.                                             
  361.                     // a:ext
  362.                     $objWriter->startElement('a:ext');
  363.                     $objWriter->writeAttribute('cx'PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getWidth()));
  364.                     $objWriter->writeAttribute('cy'PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getHeight()));
  365.                     $objWriter->endElement();
  366.  
  367.                 $objWriter->endElement();
  368.                 
  369.                 // a:prstGeom
  370.                 $objWriter->startElement('a:prstGeom');
  371.                 $objWriter->writeAttribute('prst''rect');
  372.                 $objWriter->endElement();
  373.                 
  374.                 // a:noFill
  375.                 $objWriter->writeElement('a:noFill'null);
  376.                 
  377.                 if ($shape->getShadow()->getVisible()) {
  378.                     // a:effectLst
  379.                     $objWriter->startElement('a:effectLst');
  380.                     
  381.                         // a:outerShdw
  382.                         $objWriter->startElement('a:outerShdw');
  383.                         $objWriter->writeAttribute('blurRad',         PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getShadow()->getBlurRadius()));
  384.                         $objWriter->writeAttribute('dist',            PHPPowerPoint_Shared_Drawing::pixelsToEMU($shape->getShadow()->getDistance()));
  385.                         $objWriter->writeAttribute('dir',            PHPPowerPoint_Shared_Drawing::degreesToAngle($shape->getShadow()->getDirection()));
  386.                         $objWriter->writeAttribute('algn',            $shape->getShadow()->getAlignment());
  387.                         $objWriter->writeAttribute('rotWithShape',     '0');
  388.  
  389.                             // a:srgbClr
  390.                             $objWriter->startElement('a:srgbClr');
  391.                             $objWriter->writeAttribute('val',        $shape->getShadow()->getColor()->getRGB());
  392.  
  393.                                 // a:alpha
  394.                                 $objWriter->startElement('a:alpha');
  395.                                 $objWriter->writeAttribute('val',     $shape->getShadow()->getAlpha(1000);
  396.                                 $objWriter->endElement();
  397.  
  398.                             $objWriter->endElement();
  399.  
  400.                         $objWriter->endElement();
  401.  
  402.                     $objWriter->endElement();
  403.                 }
  404.                                         
  405.             $objWriter->endElement();
  406.             
  407.             // p:txBody
  408.             $objWriter->startElement('p:txBody');
  409.             
  410.                 // a:bodyPr
  411.                 $objWriter->startElement('a:bodyPr');
  412.                 $objWriter->writeAttribute('wrap''square');
  413.                 $objWriter->writeAttribute('rtlCol''0');
  414.                 
  415.                     // a:spAutoFit
  416.                     $objWriter->writeElement('a:spAutoFit'null);
  417.                 
  418.                 $objWriter->endElement();
  419.                 
  420.                 // a:lstStyle
  421.                 $objWriter->writeElement('a:lstStyle'null);
  422.                     
  423.                 // a:p
  424.                 $objWriter->startElement('a:p');
  425.                 
  426.                     // a:pPr
  427.                     $objWriter->startElement('a:pPr');
  428.                     $objWriter->writeAttribute('algn',         $shape->getAlignment()->getHorizontal());
  429.                     $objWriter->writeAttribute('fontAlgn',     $shape->getAlignment()->getVertical());
  430.                     $objWriter->writeAttribute('indent',     $shape->getAlignment()->getIndent());
  431.                     $objWriter->writeAttribute('lvl',         $shape->getAlignment()->getLevel());
  432.                     $objWriter->endElement();
  433.  
  434.                 // Loop trough rich text elements
  435.                 $elements $shape->getRichTextElements();
  436.                 foreach ($elements as $element{
  437.                     if ($element instanceof PHPPowerPoint_Shape_RichText_Break{
  438.                         // a:br
  439.                         $objWriter->writeElement('a:br'null);
  440.                     }
  441.                     elseif ($element instanceof PHPPowerPoint_Shape_RichText_Run
  442.                             || $element instanceof PHPPowerPoint_Shape_RichText_TextElement)
  443.                     {
  444.                         // a:r
  445.                         $objWriter->startElement('a:r');
  446.                             
  447.                             // a:rPr
  448.                             if ($element instanceof PHPPowerPoint_Shape_RichText_Run{
  449.                                 // a:rPr
  450.                                 $objWriter->startElement('a:rPr');
  451.                                 
  452.                                     // Bold
  453.                                     $objWriter->writeAttribute('b'($element->getFont()->getBold('true' 'false'));
  454.                 
  455.                                     // Italic
  456.                                     $objWriter->writeAttribute('i'($element->getFont()->getItalic('true' 'false'));
  457.                                     
  458.                                     // Strikethrough
  459.                                     $objWriter->writeAttribute('strike'($element->getFont()->getStrikethrough('sngStrike' 'noStrike'));
  460.                                         
  461.                                     // Size
  462.                                     $objWriter->writeAttribute('sz'($element->getFont()->getSize(100));
  463.                                             
  464.                                     // Underline
  465.                                     $objWriter->writeAttribute('u'$element->getFont()->getUnderline());
  466.                                         
  467.                                     // Superscript / subscript
  468.                                     if ($element->getFont()->getSuperScript(|| $element->getFont()->getSubScript()) {
  469.                                         if ($element->getFont()->getSuperScript()) {
  470.                                             $objWriter->writeAttribute('baseline''30000');
  471.                                         else if ($element->getFont()->getSubScript()) {
  472.                                             $objWriter->writeAttribute('baseline''-25000');
  473.                                         }
  474.                                     }
  475.                                         
  476.                                     // Color - a:solidFill
  477.                                     $objWriter->startElement('a:solidFill');
  478.                                     
  479.                                         // a:srgbClr
  480.                                         $objWriter->startElement('a:srgbClr');
  481.                                         $objWriter->writeAttribute('val'$element->getFont()->getColor()->getRGB());
  482.                                         $objWriter->endElement();    
  483.                                     
  484.                                     $objWriter->endElement();    
  485.                                     
  486.                                     // Font - a:latin
  487.                                     $objWriter->startElement('a:latin');
  488.                                     $objWriter->writeAttribute('typeface'$element->getFont()->getName());
  489.                                     $objWriter->endElement();
  490.     
  491.                                 $objWriter->endElement();
  492.                             }
  493.                                 
  494.                             // t
  495.                             $objWriter->startElement('a:t');
  496.                             $objWriter->writeRaw(PHPPowerPoint_Shared_String::ControlCharacterPHP2OOXMLhtmlspecialchars($element->getText()) ));
  497.                             $objWriter->endElement();
  498.                                 
  499.                         $objWriter->endElement();
  500.                     }
  501.                 }
  502.  
  503.                         
  504.                 $objWriter->endElement();
  505.             
  506.             $objWriter->endElement();
  507.             
  508.             
  509.     /*
  510.  
  511.                         <a:r>
  512.                             <a:rPr lang="en-US" dirty="0" err="1" smtClean="0" />
  513.                         </a:r>
  514.  
  515.     */
  516.                 
  517.         $objWriter->endElement();
  518.     }
  519. }

Documentation generated on Sat, 25 Apr 2009 11:38:09 +0200 by phpDocumentor 1.4.1