web/lib/Zend/Pdf/Outline/Created.php
changeset 64 162c1de6545a
parent 19 1c2f13fd785c
child 68 ecaf28ffe26e
equal deleted inserted replaced
63:5b37998e522e 64:162c1de6545a
       
     1 <?php
       
     2 /**
       
     3  * Zend Framework
       
     4  *
       
     5  * LICENSE
       
     6  *
       
     7  * This source file is subject to the new BSD license that is bundled
       
     8  * with this package in the file LICENSE.txt.
       
     9  * It is also available through the world-wide-web at this URL:
       
    10  * http://framework.zend.com/license/new-bsd
       
    11  * If you did not receive a copy of the license and are unable to
       
    12  * obtain it through the world-wide-web, please send an email
       
    13  * to license@zend.com so we can send you a copy immediately.
       
    14  *
       
    15  * @category   Zend
       
    16  * @package    Zend_Pdf
       
    17  * @subpackage Actions
       
    18  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    19  * @license    http://framework.zend.com/license/new-bsd     New BSD License
       
    20  * @version    $Id: Created.php 20096 2010-01-06 02:05:09Z bkarwin $
       
    21  */
       
    22 
       
    23 
       
    24 /** Internally used classes */
       
    25 require_once 'Zend/Pdf/Element/Array.php';
       
    26 require_once 'Zend/Pdf/Element/Dictionary.php';
       
    27 require_once 'Zend/Pdf/Element/Numeric.php';
       
    28 require_once 'Zend/Pdf/Element/String.php';
       
    29 
       
    30 
       
    31 /** Zend_Pdf_Outline */
       
    32 require_once 'Zend/Pdf/Outline.php';
       
    33 
       
    34 /**
       
    35  * PDF outline representation class
       
    36  *
       
    37  * @todo Implement an ability to associate an outline item with a structure element (PDF 1.3 feature)
       
    38  *
       
    39  * @package    Zend_Pdf
       
    40  * @subpackage Outlines
       
    41  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    42  * @license    http://framework.zend.com/license/new-bsd     New BSD License
       
    43  */
       
    44 class Zend_Pdf_Outline_Created extends Zend_Pdf_Outline
       
    45 {
       
    46     /**
       
    47      * Outline title.
       
    48      *
       
    49      * @var string
       
    50      */
       
    51     protected $_title;
       
    52 
       
    53     /**
       
    54      * Color to be used for the outline entry’s text.
       
    55 
       
    56      * It uses the DeviceRGB color space for color representation.
       
    57      * Null means default value - black ([0.0 0.0 0.0] in RGB representation).
       
    58      *
       
    59      * @var Zend_Pdf_Color_Rgb
       
    60      */
       
    61     protected $_color = null;
       
    62 
       
    63     /**
       
    64      * True if outline item is displayed in italic.
       
    65      * Default value is false.
       
    66      *
       
    67      * @var boolean
       
    68      */
       
    69     protected $_italic = false;
       
    70 
       
    71     /**
       
    72      * True if outline item is displayed in bold.
       
    73      * Default value is false.
       
    74      *
       
    75      * @var boolean
       
    76      */
       
    77     protected $_bold = false;
       
    78 
       
    79     /**
       
    80      * Target destination or action.
       
    81      * String means named destination
       
    82      *
       
    83      * Null means no target.
       
    84      *
       
    85      * @var Zend_Pdf_Destination|Zend_Pdf_Action
       
    86      */
       
    87     protected $_target = null;
       
    88 
       
    89 
       
    90     /**
       
    91      * Get outline title.
       
    92      *
       
    93      * @return string
       
    94      */
       
    95     public function getTitle()
       
    96     {
       
    97         return $this->_title;
       
    98     }
       
    99 
       
   100     /**
       
   101      * Set outline title
       
   102      *
       
   103      * @param string $title
       
   104      * @return Zend_Pdf_Outline
       
   105      */
       
   106     public function setTitle($title)
       
   107     {
       
   108         $this->_title = $title;
       
   109         return $this;
       
   110     }
       
   111 
       
   112     /**
       
   113      * Returns true if outline item is displayed in italic
       
   114      *
       
   115      * @return boolean
       
   116      */
       
   117     public function isItalic()
       
   118     {
       
   119         return $this->_italic;
       
   120     }
       
   121 
       
   122     /**
       
   123      * Sets 'isItalic' outline flag
       
   124      *
       
   125      * @param boolean $isItalic
       
   126      * @return Zend_Pdf_Outline
       
   127      */
       
   128     public function setIsItalic($isItalic)
       
   129     {
       
   130         $this->_italic = $isItalic;
       
   131         return $this;
       
   132     }
       
   133 
       
   134     /**
       
   135      * Returns true if outline item is displayed in bold
       
   136      *
       
   137      * @return boolean
       
   138      */
       
   139     public function isBold()
       
   140     {
       
   141         return $this->_bold;
       
   142     }
       
   143 
       
   144     /**
       
   145      * Sets 'isBold' outline flag
       
   146      *
       
   147      * @param boolean $isBold
       
   148      * @return Zend_Pdf_Outline
       
   149      */
       
   150     public function setIsBold($isBold)
       
   151     {
       
   152         $this->_bold = $isBold;
       
   153         return $this;
       
   154     }
       
   155 
       
   156 
       
   157     /**
       
   158      * Get outline text color.
       
   159      *
       
   160      * @return Zend_Pdf_Color_Rgb
       
   161      */
       
   162     public function getColor()
       
   163     {
       
   164         return $this->_color;
       
   165     }
       
   166 
       
   167     /**
       
   168      * Set outline text color.
       
   169      * (null means default color which is black)
       
   170      *
       
   171      * @param Zend_Pdf_Color_Rgb $color
       
   172      * @return Zend_Pdf_Outline
       
   173      */
       
   174     public function setColor(Zend_Pdf_Color_Rgb $color)
       
   175     {
       
   176         $this->_color = $color;
       
   177         return $this;
       
   178     }
       
   179 
       
   180     /**
       
   181      * Get outline target.
       
   182      *
       
   183      * @return Zend_Pdf_Target
       
   184      */
       
   185     public function getTarget()
       
   186     {
       
   187         return $this->_target;
       
   188     }
       
   189 
       
   190     /**
       
   191      * Set outline target.
       
   192      * Null means no target
       
   193      *
       
   194      * @param Zend_Pdf_Target|string $target
       
   195      * @return Zend_Pdf_Outline
       
   196      * @throws Zend_Pdf_Exception
       
   197      */
       
   198     public function setTarget($target = null)
       
   199     {
       
   200         if (is_string($target)) {
       
   201             require_once 'Zend/Pdf/Destination/Named.php';
       
   202             $target = new Zend_Pdf_Destination_Named($target);
       
   203         }
       
   204 
       
   205         if ($target === null  ||  $target instanceof Zend_Pdf_Target) {
       
   206             $this->_target = $target;
       
   207         } else {
       
   208             require_once 'Zend/Pdf/Exception.php';
       
   209             throw new Zend_Pdf_Exception('Outline target has to be Zend_Pdf_Destination or Zend_Pdf_Action object or string');
       
   210         }
       
   211 
       
   212         return $this;
       
   213     }
       
   214 
       
   215 
       
   216     /**
       
   217      * Object constructor
       
   218      *
       
   219      * @param array $options
       
   220      * @throws Zend_Pdf_Exception
       
   221      */
       
   222     public function __construct($options = array())
       
   223     {
       
   224         if (!isset($options['title'])) {
       
   225             require_once 'Zend/Pdf/Exception.php';
       
   226             throw new Zend_Pdf_Exception('Title parameter is required.');
       
   227         }
       
   228 
       
   229         $this->setOptions($options);
       
   230     }
       
   231 
       
   232     /**
       
   233      * Dump Outline and its child outlines into PDF structures
       
   234      *
       
   235      * Returns dictionary indirect object or reference
       
   236      *
       
   237      * @internal
       
   238      * @param Zend_Pdf_ElementFactory    $factory object factory for newly created indirect objects
       
   239      * @param boolean $updateNavigation  Update navigation flag
       
   240      * @param Zend_Pdf_Element $parent   Parent outline dictionary reference
       
   241      * @param Zend_Pdf_Element $prev     Previous outline dictionary reference
       
   242      * @param SplObjectStorage $processedOutlines  List of already processed outlines
       
   243      * @return Zend_Pdf_Element
       
   244      * @throws Zend_Pdf_Exception
       
   245      */
       
   246     public function dumpOutline(Zend_Pdf_ElementFactory_Interface $factory,
       
   247                                                                   $updateNavigation,
       
   248                                                  Zend_Pdf_Element $parent,
       
   249                                                  Zend_Pdf_Element $prev = null,
       
   250                                                  SplObjectStorage $processedOutlines = null)
       
   251     {
       
   252         if ($processedOutlines === null) {
       
   253             $processedOutlines = new SplObjectStorage();
       
   254         }
       
   255         $processedOutlines->attach($this);
       
   256 
       
   257         $outlineDictionary = $factory->newObject(new Zend_Pdf_Element_Dictionary());
       
   258 
       
   259         $outlineDictionary->Title = new Zend_Pdf_Element_String($this->getTitle());
       
   260 
       
   261         $target = $this->getTarget();
       
   262         if ($target === null) {
       
   263             // Do nothing
       
   264         } else if ($target instanceof Zend_Pdf_Destination) {
       
   265             $outlineDictionary->Dest = $target->getResource();
       
   266         } else if ($target instanceof Zend_Pdf_Action) {
       
   267             $outlineDictionary->A    = $target->getResource();
       
   268         } else {
       
   269             require_once 'Zend/Pdf/Exception.php';
       
   270             throw new Zend_Pdf_Exception('Outline target has to be Zend_Pdf_Destination, Zend_Pdf_Action object or null');
       
   271         }
       
   272 
       
   273         $color = $this->getColor();
       
   274         if ($color !== null) {
       
   275             $components = $color->getComponents();
       
   276             $colorComponentElements = array(new Zend_Pdf_Element_Numeric($components[0]),
       
   277                                             new Zend_Pdf_Element_Numeric($components[1]),
       
   278                                             new Zend_Pdf_Element_Numeric($components[2]));
       
   279             $outlineDictionary->C = new Zend_Pdf_Element_Array($colorComponentElements);
       
   280         }
       
   281 
       
   282         if ($this->isItalic()  ||  $this->isBold()) {
       
   283             $outlineDictionary->F = new Zend_Pdf_Element_Numeric(($this->isItalic()? 1 : 0)  |   // Bit 1 - Italic
       
   284                                                                  ($this->isBold()?   2 : 0));    // Bit 2 - Bold
       
   285         }
       
   286 
       
   287 
       
   288         $outlineDictionary->Parent = $parent;
       
   289         $outlineDictionary->Prev   = $prev;
       
   290 
       
   291         $lastChild = null;
       
   292         foreach ($this->childOutlines as $childOutline) {
       
   293             if ($processedOutlines->contains($childOutline)) {
       
   294                 require_once 'Zend/Pdf/Exception.php';
       
   295                 throw new Zend_Pdf_Exception('Outlines cyclyc reference is detected.');
       
   296             }
       
   297 
       
   298             if ($lastChild === null) {
       
   299                 $lastChild = $childOutline->dumpOutline($factory, true, $outlineDictionary, null, $processedOutlines);
       
   300                 $outlineDictionary->First = $lastChild;
       
   301             } else {
       
   302                 $childOutlineDictionary = $childOutline->dumpOutline($factory, true, $outlineDictionary, $lastChild, $processedOutlines);
       
   303                 $lastChild->Next = $childOutlineDictionary;
       
   304                 $lastChild       = $childOutlineDictionary;
       
   305             }
       
   306         }
       
   307         $outlineDictionary->Last = $lastChild;
       
   308 
       
   309         if (count($this->childOutlines) != 0) {
       
   310             $outlineDictionary->Count = new Zend_Pdf_Element_Numeric(($this->isOpen()? 1 : -1)*count($this->childOutlines));
       
   311         }
       
   312 
       
   313         return $outlineDictionary;
       
   314     }
       
   315 }