getType() != Zend_Pdf_Element::TYPE_ARRAY) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('$destinationArray mast be direct or indirect array object.'); } $this->_destinationArray = $destinationArray; if (count($this->_destinationArray->items) == 0) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Destination array must contain a page reference.'); } if (count($this->_destinationArray->items) == 1) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Destination array must contain a destination type name.'); } switch ($this->_destinationArray->items[0]->getType()) { case Zend_Pdf_Element::TYPE_NUMERIC: $this->_isRemote = true; break; case Zend_Pdf_Element::TYPE_DICTIONARY: $this->_isRemote = false; break; default: require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Destination target must be a page number or page dictionary object.'); break; } } public static function load(Zend_Pdf_Element $destinationArray) { if ($destinationArray->getType() != Zend_Pdf_Element::TYPE_ARRAY) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('$destinationArray mast be direct or indirect array object.'); } if (count($destinationArray->items) == 0) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Destination array must contain a page reference.'); } if (count($destinationArray->items) == 1) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Destination array must contain a destination type name.'); } switch ($destinationArray->items[1]->value) { case 'XYZ': require_once 'Zend/Pdf/Destination/Zoom.php'; return new Zend_Pdf_Destination_Zoom($destinationArray); break; case 'Fit': require_once 'Zend/Pdf/Destination/Fit.php'; return new Zend_Pdf_Destination_Fit($destinationArray); break; case 'FitH': require_once 'Zend/Pdf/Destination/FitHorizontally.php'; return new Zend_Pdf_Destination_FitHorizontally($destinationArray); break; case 'FitV': require_once 'Zend/Pdf/Destination/FitVertically.php'; return new Zend_Pdf_Destination_FitVertically($destinationArray); break; case 'FitR': require_once 'Zend/Pdf/Destination/FitRectangle.php'; return new Zend_Pdf_Destination_FitRectangle($destinationArray); break; case 'FitB': require_once 'Zend/Pdf/Destination/FitBoundingBox.php'; return new Zend_Pdf_Destination_FitBoundingBox($destinationArray); break; case 'FitBH': require_once 'Zend/Pdf/Destination/FitBoundingBoxHorizontally.php'; return new Zend_Pdf_Destination_FitBoundingBoxHorizontally($destinationArray); break; case 'FitBV': require_once 'Zend/Pdf/Destination/FitBoundingBoxVertically.php'; return new Zend_Pdf_Destination_FitBoundingBoxVertically($destinationArray); break; default: require_once 'Zend/Pdf/Destination/Unknown.php'; return new Zend_Pdf_Destination_Unknown($destinationArray); break; } } /** * Returns true if it's a remote destination * * @return boolean */ public function isRemote() { return $this->_isRemote; } /** * Returns destination target * * Returns page number for remote destinations and * page dictionary object reference otherwise * * @return integer|Zend_Pdf_Element_Dictionary */ public function getTarget() { if ($this->isRemote()) { return $this->_destinationArray->items[0]->value; } else { return $this->_destinationArray->items[0]; } } /** * Get destination array object * * @internal * @return Zend_Pdf_Element_Array|Zend_Pdf_Element_Object|Zend_Pdf_Element_Reference */ public function getDestinationArray() { return $this->_destinationArray; } }