/** * Resolve destination. * * Returns Zend_Pdf_Page page object or null if destination is not found within PDF document. * * @param Zend_Pdf_Destination $destination Destination to resolve * @param boolean $refreshPagesHash Refresh page collection hashes before processing * @return Zend_Pdf_Page|null * @throws Zend_Pdf_Exception */ public function resolveDestination(Zend_Pdf_Destination $destination, $refreshPageCollectionHashes = true) { if ($this->_pageReferences === null || $refreshPageCollectionHashes) { $this->_refreshPagesHash(); } if ($destination instanceof Zend_Pdf_Destination_Named) { if (!isset($this->_namedTargets[$destination->getName()])) { return null; } $destination = $this->getNamedDestination($destination->getName()); if ($destination instanceof Zend_Pdf_Action) { if (!$destination instanceof Zend_Pdf_Action_GoTo) { return null; } $destination = $destination->getDestination(); } if (!$destination instanceof Zend_Pdf_Destination_Explicit) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Named destination target has to be an explicit destination.'); } } // Named target is an explicit destination $pageElement = $destination->getResource()->items[0]; if ($pageElement->getType() == Zend_Pdf_Element::TYPE_NUMERIC) { // Page reference is a PDF number if (!isset($this->_pageNumbers[$pageElement->value])) { return null; } return $this->_pageNumbers[$pageElement->value]; } // Page reference is a PDF page dictionary reference $pageDictionaryHashId = spl_object_hash($pageElement->getObject()); if (!isset($this->_pageReferences[$pageDictionaryHashId])) { return null; } return $this->_pageReferences[$pageDictionaryHashId]; }