diff -r bd595ad770fc -r 1c2f13fd785c web/enmi/Zend/Pdf/Annotation/Link.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/enmi/Zend/Pdf/Annotation/Link.php Thu Jan 20 19:30:54 2011 +0100 @@ -0,0 +1,162 @@ +getType() != Zend_Pdf_Element::TYPE_DICTIONARY) { + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception('Annotation dictionary resource has to be a dictionary.'); + } + + if ($annotationDictionary->Subtype === null || + $annotationDictionary->Subtype->getType() != Zend_Pdf_Element::TYPE_NAME || + $annotationDictionary->Subtype->value != 'Link') { + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception('Subtype => Link entry is requires'); + } + + parent::__construct($annotationDictionary); + } + + /** + * Create link annotation object + * + * @param float $x1 + * @param float $y1 + * @param float $x2 + * @param float $y2 + * @param Zend_Pdf_Target|string $target + * @return Zend_Pdf_Annotation_Link + */ + public static function create($x1, $y1, $x2, $y2, $target) + { + if (is_string($target)) { + require_once 'Zend/Pdf/Destination/Named.php'; + $destination = Zend_Pdf_Destination_Named::create($target); + } + if (!$target instanceof Zend_Pdf_Target) { + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception('$target parameter must be a Zend_Pdf_Target object or a string.'); + } + + $annotationDictionary = new Zend_Pdf_Element_Dictionary(); + + $annotationDictionary->Type = new Zend_Pdf_Element_Name('Annot'); + $annotationDictionary->Subtype = new Zend_Pdf_Element_Name('Link'); + + $rectangle = new Zend_Pdf_Element_Array(); + $rectangle->items[] = new Zend_Pdf_Element_Numeric($x1); + $rectangle->items[] = new Zend_Pdf_Element_Numeric($y1); + $rectangle->items[] = new Zend_Pdf_Element_Numeric($x2); + $rectangle->items[] = new Zend_Pdf_Element_Numeric($y2); + $annotationDictionary->Rect = $rectangle; + + if ($target instanceof Zend_Pdf_Destination) { + $annotationDictionary->Dest = $target->getResource(); + } else { + $annotationDictionary->A = $target->getResource(); + } + + return new Zend_Pdf_Annotation_Link($annotationDictionary); + } + + /** + * Set link annotation destination + * + * @param Zend_Pdf_Target|string $target + * @return Zend_Pdf_Annotation_Link + */ + public function setDestination($target) + { + if (is_string($target)) { + require_once 'Zend/Pdf/Destination/Named.php'; + $destination = Zend_Pdf_Destination_Named::create($target); + } + if (!$target instanceof Zend_Pdf_Target) { + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception('$target parameter must be a Zend_Pdf_Target object or a string.'); + } + + $this->_annotationDictionary->touch(); + $this->_annotationDictionary->Dest = $destination->getResource(); + if ($target instanceof Zend_Pdf_Destination) { + $this->_annotationDictionary->Dest = $target->getResource(); + $this->_annotationDictionary->A = null; + } else { + $this->_annotationDictionary->Dest = null; + $this->_annotationDictionary->A = $target->getResource(); + } + + return $this; + } + + /** + * 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); + } + } +}