|
|
@@ -20,6 +20,13 @@
|
|
|
* @version $Id$
|
|
|
*/
|
|
|
|
|
|
+/** Internally used classes */
|
|
|
+require_once 'Zend/Pdf/Element/Dictionary.php';
|
|
|
+require_once 'Zend/Pdf/Element/Name.php';
|
|
|
+require_once 'Zend/Pdf/Element/String.php';
|
|
|
+require_once 'Zend/Pdf/Element/Boolean.php';
|
|
|
+
|
|
|
+
|
|
|
/** Zend_Pdf_Action */
|
|
|
require_once 'Zend/Pdf/Action.php';
|
|
|
|
|
|
@@ -27,6 +34,8 @@ require_once 'Zend/Pdf/Action.php';
|
|
|
/**
|
|
|
* PDF 'Resolve a uniform resource identifier' action
|
|
|
*
|
|
|
+ * A URI action causes a URI to be resolved.
|
|
|
+ *
|
|
|
* @package Zend_Pdf
|
|
|
* @subpackage Actions
|
|
|
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
|
|
|
@@ -34,4 +43,125 @@ require_once 'Zend/Pdf/Action.php';
|
|
|
*/
|
|
|
class Zend_Pdf_Action_URI extends Zend_Pdf_Action
|
|
|
{
|
|
|
+ /**
|
|
|
+ * 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');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Validate URI
|
|
|
+ *
|
|
|
+ * @param string $uri
|
|
|
+ * @return true
|
|
|
+ * @throws Zend_Pdf_Exception
|
|
|
+ */
|
|
|
+ protected static function _validateUri($uri)
|
|
|
+ {
|
|
|
+ $scheme = parse_url((string)$uri, PHP_URL_SCHEME);
|
|
|
+ if ($scheme === false || $scheme === null) {
|
|
|
+ require_once 'Zend/Pdf/Exception.php';
|
|
|
+ throw new Zend_Pdf_Exception('Invalid URI');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Create new Zend_Pdf_Action_URI object using specified uri
|
|
|
+ *
|
|
|
+ * @param string $uri The URI to resolve, encoded in 7-bit ASCII
|
|
|
+ * @param boolean $isMap A flag specifying whether to track the mouse position when the URI is resolved
|
|
|
+ * @return Zend_Pdf_Action_URI
|
|
|
+ */
|
|
|
+ public static function create($uri, $isMap = false)
|
|
|
+ {
|
|
|
+ self::_validateUri($uri);
|
|
|
+
|
|
|
+ $dictionary = new Zend_Pdf_Element_Dictionary();
|
|
|
+ $dictionary->Type = new Zend_Pdf_Element_Name('Action');
|
|
|
+ $dictionary->S = new Zend_Pdf_Element_Name('URI');
|
|
|
+ $dictionary->Next = null;
|
|
|
+ $dictionary->URI = new Zend_Pdf_Element_String($uri);
|
|
|
+ if ($isMap) {
|
|
|
+ $dictionary->IsMap = new Zend_Pdf_Element_Boolean(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ return new Zend_Pdf_Action_URI($dictionary, new SplObjectStorage());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Set URI to resolve
|
|
|
+ *
|
|
|
+ * @param string $uri The uri to resolve, encoded in 7-bit ASCII.
|
|
|
+ * @return Zend_Pdf_Action_URI
|
|
|
+ */
|
|
|
+ public function setUri($uri)
|
|
|
+ {
|
|
|
+ $this->_validateUri($uri);
|
|
|
+
|
|
|
+ $this->_actionDictionary->touch();
|
|
|
+ $this->_actionDictionary->URI = new Zend_Pdf_Element_String($uri);
|
|
|
+
|
|
|
+ return $this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Get URI to resolve
|
|
|
+ *
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public function getUri()
|
|
|
+ {
|
|
|
+ return $this->_actionDictionary->URI->value;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Set IsMap property
|
|
|
+ *
|
|
|
+ * If the IsMap flag is true and the user has triggered the URI action by clicking
|
|
|
+ * an annotation, the coordinates of the mouse position at the time the action is
|
|
|
+ * performed should be transformed from device space to user space and then offset
|
|
|
+ * relative to the upper-left corner of the annotation rectangle.
|
|
|
+ *
|
|
|
+ * @param boolean $isMap A flag specifying whether to track the mouse position when the URI is resolved
|
|
|
+ * @return Zend_Pdf_Action_URI
|
|
|
+ */
|
|
|
+ public function setIsMap($isMap)
|
|
|
+ {
|
|
|
+ $this->_actionDictionary->touch();
|
|
|
+
|
|
|
+ if ($isMap) {
|
|
|
+ $this->_actionDictionary->IsMap = new Zend_Pdf_Element_Boolean(true);
|
|
|
+ } else {
|
|
|
+ $this->_actionDictionary->IsMap = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Get IsMap property
|
|
|
+ *
|
|
|
+ * If the IsMap flag is true and the user has triggered the URI action by clicking
|
|
|
+ * an annotation, the coordinates of the mouse position at the time the action is
|
|
|
+ * performed should be transformed from device space to user space and then offset
|
|
|
+ * relative to the upper-left corner of the annotation rectangle.
|
|
|
+ *
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ public function getIsMap()
|
|
|
+ {
|
|
|
+ return $this->_actionDictionary->IsMap !== null &&
|
|
|
+ $this->_actionDictionary->IsMap->value;
|
|
|
+ }
|
|
|
}
|