Example #1
0
 /**
  * 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.');
     }
 }
Example #2
0
 /**
  * Set goto action destination
  *
  * @param Zend_Pdf_Destination|string $destination
  * @return Zend_Pdf_Action_GoTo
  */
 public function setDestination(Zend_Pdf_Destination $destination)
 {
     $this->_destination = $destination;
     $this->_actionDictionary->touch();
     $this->_actionDictionary->D = $destination->getResource();
     return $this;
 }
Example #3
0
 /**
  * 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.');
         }
     }
 }
Example #4
0
 /**
  * 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;
 }
Example #5
0
    /**
     * 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];
    }
 /**
  * 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);
     }
 }
Example #7
0
 public function testGettersSetters()
 {
     $pdf = new Zend_Pdf();
     $page1 = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
     $page2 = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
     // Zend_Pdf_Destination_Zoom
     $destArray = new Zend_Pdf_Element_Array();
     $destArray->items[] = $page2->getPageDictionary();
     $destArray->items[] = new Zend_Pdf_Element_Name('XYZ');
     $destArray->items[] = new Zend_Pdf_Element_Numeric(0);
     // left
     $destArray->items[] = new Zend_Pdf_Element_Numeric(842);
     // top
     $destArray->items[] = new Zend_Pdf_Element_Numeric(1);
     // zoom
     $destination = Zend_Pdf_Destination::load($destArray);
     $this->assertEquals($destination->getLeftEdge(), 0);
     $destination->setLeftEdge(5);
     $this->assertEquals($destination->getLeftEdge(), 5);
     $this->assertEquals($destination->getTopEdge(), 842);
     $destination->setTopEdge(825);
     $this->assertEquals($destination->getTopEdge(), 825);
     $this->assertEquals($destination->getZoomFactor(), 1);
     $destination->setZoomFactor(0.5);
     $this->assertEquals($destination->getZoomFactor(), 0.5);
     // Zend_Pdf_Destination_FitHorizontally
     $destArray = new Zend_Pdf_Element_Array();
     $destArray->items[] = $page2->getPageDictionary();
     $destArray->items[] = new Zend_Pdf_Element_Name('FitH');
     $destArray->items[] = new Zend_Pdf_Element_Numeric(842);
     // top
     $destination = Zend_Pdf_Destination::load($destArray);
     $this->assertEquals($destination->getTopEdge(), 842);
     $destination->setTopEdge(825);
     $this->assertEquals($destination->getTopEdge(), 825);
     // Zend_Pdf_Destination_FitVertically
     $destArray = new Zend_Pdf_Element_Array();
     $destArray->items[] = $page2->getPageDictionary();
     $destArray->items[] = new Zend_Pdf_Element_Name('FitV');
     $destArray->items[] = new Zend_Pdf_Element_Numeric(0);
     // left
     $destination = Zend_Pdf_Destination::load($destArray);
     $this->assertEquals($destination->getLeftEdge(), 0);
     $destination->setLeftEdge(5);
     $this->assertEquals($destination->getLeftEdge(), 5);
     // Zend_Pdf_Destination_FitRectangle
     $destArray = new Zend_Pdf_Element_Array();
     $destArray->items[] = $page2->getPageDictionary();
     $destArray->items[] = new Zend_Pdf_Element_Name('FitR');
     $destArray->items[] = new Zend_Pdf_Element_Numeric(0);
     // left
     $destArray->items[] = new Zend_Pdf_Element_Numeric(10);
     // bottom
     $destArray->items[] = new Zend_Pdf_Element_Numeric(595);
     // right
     $destArray->items[] = new Zend_Pdf_Element_Numeric(842);
     // top
     $destination = Zend_Pdf_Destination::load($destArray);
     $this->assertEquals($destination->getLeftEdge(), 0);
     $destination->setLeftEdge(5);
     $this->assertEquals($destination->getLeftEdge(), 5);
     $this->assertEquals($destination->getBottomEdge(), 10);
     $destination->setBottomEdge(20);
     $this->assertEquals($destination->getBottomEdge(), 20);
     $this->assertEquals($destination->getRightEdge(), 595);
     $destination->setRightEdge(590);
     $this->assertEquals($destination->getRightEdge(), 590);
     $this->assertEquals($destination->getTopEdge(), 842);
     $destination->setTopEdge(825);
     $this->assertEquals($destination->getTopEdge(), 825);
     // Zend_Pdf_Destination_FitBoundingBoxHorizontally
     $destArray = new Zend_Pdf_Element_Array();
     $destArray->items[] = $page2->getPageDictionary();
     $destArray->items[] = new Zend_Pdf_Element_Name('FitBH');
     $destArray->items[] = new Zend_Pdf_Element_Numeric(842);
     // top
     $destination = Zend_Pdf_Destination::load($destArray);
     $this->assertEquals($destination->getTopEdge(), 842);
     $destination->setTopEdge(825);
     $this->assertEquals($destination->getTopEdge(), 825);
     // Zend_Pdf_Destination_FitBoundingBoxVertically
     $destArray = new Zend_Pdf_Element_Array();
     $destArray->items[] = $page2->getPageDictionary();
     $destArray->items[] = new Zend_Pdf_Element_Name('FitBV');
     $destArray->items[] = new Zend_Pdf_Element_Numeric(0);
     // left
     $destination = Zend_Pdf_Destination::load($destArray);
     $this->assertEquals($destination->getLeftEdge(), 0);
     $destination->setLeftEdge(5);
     $this->assertEquals($destination->getLeftEdge(), 5);
 }
Example #8
0
 /**
  * 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);
     }
 }