/** * Object constructor * * @param Zend_Pdf_Element_Dictionary $dictionary * @param SplObjectStorage $processedActions list of already processed action dictionaries, used to avoid cyclic references * @throws Zend_Pdf_Exception */ public function __construct(Zend_Pdf_Element $dictionary, SplObjectStorage $processedActions) { require_once 'Zend/Pdf/Element.php'; if ($dictionary->getType() != Zend_Pdf_Element::TYPE_DICTIONARY) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('$dictionary mast be a direct or an indirect dictionary object.'); } $this->_actionDictionary = $dictionary; if ($dictionary->Next !== null) { if ($dictionary->Next instanceof Zend_Pdf_Element_Dictionary) { // Check if dictionary object is not already processed if (!$processedActions->contains($dictionary->Next)) { $processedActions->attach($dictionary->Next); $this->next[] = Zend_Pdf_Action::load($dictionary->Next, $processedActions); } } else { if ($dictionary->Next instanceof Zend_Pdf_Element_Array) { foreach ($dictionary->Next->items as $chainedActionDictionary) { // Check if dictionary object is not already processed if (!$processedActions->contains($chainedActionDictionary)) { $processedActions->attach($chainedActionDictionary); $this->next[] = Zend_Pdf_Action::load($chainedActionDictionary, $processedActions); } } } else { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('PDF Action dictionary Next entry must be a dictionary or an array.'); } } } $this->_originalNextList = $this->next; }
/** * Parse resource and return it as an Action or Explicit Destination * * $param Zend_Pdf_Element $resource * @return Zend_Pdf_Destination| * @throws Zend_Pdf_Exception */ public static function load(Zend_Pdf_Element $resource) { require_once 'Zend/Pdf/Element.php'; if ($resource->getType() == Zend_Pdf_Element::TYPE_DICTIONARY) { if (($resource->Type === null || $resource->Type->value == 'Action') && $resource->S !== null) { // It's a well-formed action, load it require_once 'Zend/Pdf/Action.php'; return Zend_Pdf_Action::load($resource); } else { if ($resource->D !== null) { // It's a destination $resource = $resource->D; } else { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Wrong resource type.'); } } } if ($resource->getType() == Zend_Pdf_Element::TYPE_ARRAY || $resource->getType() == Zend_Pdf_Element::TYPE_NAME || $resource->getType() == Zend_Pdf_Element::TYPE_STRING) { // Resource is an array, just treat it as an explicit destination array require_once 'Zend/Pdf/Destination.php'; return Zend_Pdf_Destination::load($resource); } else { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Wrong resource type.'); } }
/** * Object constructor * * @param Zend_Pdf_Element_Dictionary $dictionary * @param SplObjectStorage $processedActions list of already processed action dictionaries, used to avoid cyclic references * @throws Zend_Pdf_Exception */ public function __construct(Zend_Pdf_Element $dictionary, SplObjectStorage $processedActions) { parent::__construct($dictionary, $processedActions); if ($dictionary->URI === null) { //require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('URI action dictionary entry is required'); } }
/** * Parse resource and return it as an Action or Explicit Destination * * $param Zend_Pdf_Element $resource * @return Zend_Pdf_Destination| * @throws Zend_Pdf_Exception */ public static function load(Zend_Pdf_Element $resource) { if ($resource->getType() == Zend_Pdf_Element::TYPE_DICTIONARY) { // Load destination as appropriate action return Zend_Pdf_Action::load($resource); } else { if ($resource->getType() == Zend_Pdf_Element::TYPE_ARRAY || $resource->getType() == Zend_Pdf_Element::TYPE_NAME || $resource->getType() == Zend_Pdf_Element::TYPE_STRING) { // Resource is an array, just treat it as an explicit destination array return Zend_Pdf_Destination::load($resource); } else { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Wrong resource type.'); } } }
/** * Object constructor * * @param Zend_Pdf_Element_Dictionary $dictionary * @param SplObjectStorage $processedActions list of already processed action dictionaries, used to avoid cyclic references */ public function __construct(Zend_Pdf_Element $dictionary, SplObjectStorage $processedActions) { parent::__construct($dictionary, $processedActions); $this->_destination = Zend_Pdf_Destination::load($dictionary->D); }
/** * Get outline target. * * @return Zend_Pdf_Target * @throws Zend_Pdf_Exception */ public function getTarget() { if ($this->_outlineDictionary->Dest !== null) { if ($this->_outlineDictionary->A !== null) { require_once 'Zend/Pdf/Exception.php'; throw new Zend_Pdf_Exception('Outline dictionary may contain Dest or A entry, but not both.'); } require_once 'Zend/Pdf/Destination.php'; return Zend_Pdf_Destination::load($this->_outlineDictionary->Dest); } else { if ($this->_outlineDictionary->A !== null) { require_once 'Zend/Pdf/Action.php'; return Zend_Pdf_Action::load($this->_outlineDictionary->A); } } return null; }
/** * Walk through action and its chained actions tree and remove nodes * if they are GoTo actions with an unresolved target. * * Returns null if root node is deleted or updated action overwise. * * @todo Give appropriate name and make method public * * @param Zend_Pdf_Action $action * @param boolean $refreshPagesHash Refresh page collection hashes before processing * @return Zend_Pdf_Action|null */ protected function _cleanUpAction(Zend_Pdf_Action $action, $refreshPageCollectionHashes = true) { if ($this->_pageReferences === null || $refreshPageCollectionHashes) { $this->_refreshPagesHash(); } // Named target is an action if ($action instanceof Zend_Pdf_Action_GoTo && $this->resolveDestination($action->getDestination(), false) === null) { // Action itself is a GoTo action with an unresolved destination return null; } // Walk through child actions $iterator = new RecursiveIteratorIterator($action, RecursiveIteratorIterator::SELF_FIRST); $actionsToClean = array(); $deletionCandidateKeys = array(); foreach ($iterator as $chainedAction) { if ($chainedAction instanceof Zend_Pdf_Action_GoTo && $this->resolveDestination($chainedAction->getDestination(), false) === null) { // Some child action is a GoTo action with an unresolved destination // Mark it as a candidate for deletion $actionsToClean[] = $iterator->getSubIterator(); $deletionCandidateKeys[] = $iterator->getSubIterator()->key(); } } foreach ($actionsToClean as $id => $action) { unset($action->next[$deletionCandidateKeys[$id]]); } return $action; }
/** * Get link annotation destination * * @return Zend_Pdf_Target|null */ public function getDestination() { if ($this->_annotationDictionary->Dest === null && $this->_annotationDictionary->A === null) { return null; } if ($this->_annotationDictionary->Dest !== null) { #require_once 'Zend/Pdf/Destination.php'; return Zend_Pdf_Destination::load($this->_annotationDictionary->Dest); } else { #require_once 'Zend/Pdf/Action.php'; return Zend_Pdf_Action::load($this->_annotationDictionary->A); } }
public function testActionURILoad2() { $dictionary = new Zend_Pdf_Element_Dictionary(); $dictionary->Type = new Zend_Pdf_Element_Name('Action'); $dictionary->S = new Zend_Pdf_Element_Name('URI'); try { $action = Zend_Pdf_Action::load($dictionary); $this->fail("exception expected"); } catch (Zend_Pdf_Exception $e) { $this->assertContains('URI action dictionary entry is required', $e->getMessage()); } }
/** * Get link annotation destination * * @return Zend_Pdf_Target|null */ public function getDestination() { if ($this->_annotationDictionary->Dest === null && $this->_annotationDictionary->A === null) { return null; } if ($this->_annotationDictionary->Dest !== null) { return Zend_Pdf_Destination::load($this->_annotationDictionary->Dest); } else { return Zend_Pdf_Action::load($this->_annotationDictionary->A); } }