diff -r 5b37998e522e -r 162c1de6545a web/lib/Zend/Pdf/Outline.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Pdf/Outline.php Fri Mar 11 15:05:35 2011 +0100 @@ -0,0 +1,373 @@ +_open; + } + + /** + * Sets 'isOpen' outline flag + * + * @param boolean $isOpen + * @return Zend_Pdf_Outline + */ + public function setIsOpen($isOpen) + { + $this->_open = $isOpen; + return $this; + } + + /** + * Returns true if outline item is displayed in italic + * + * @return boolean + */ + abstract public function isItalic(); + + /** + * Sets 'isItalic' outline flag + * + * @param boolean $isItalic + * @return Zend_Pdf_Outline + */ + abstract public function setIsItalic($isItalic); + + /** + * Returns true if outline item is displayed in bold + * + * @return boolean + */ + abstract public function isBold(); + + /** + * Sets 'isBold' outline flag + * + * @param boolean $isBold + * @return Zend_Pdf_Outline + */ + abstract public function setIsBold($isBold); + + + /** + * Get outline text color. + * + * @return Zend_Pdf_Color_Rgb + */ + abstract public function getColor(); + + /** + * Set outline text color. + * (null means default color which is black) + * + * @param Zend_Pdf_Color_Rgb $color + * @return Zend_Pdf_Outline + */ + abstract public function setColor(Zend_Pdf_Color_Rgb $color); + + /** + * Get outline target. + * + * @return Zend_Pdf_Target + */ + abstract public function getTarget(); + + /** + * Set outline target. + * Null means no target + * + * @param Zend_Pdf_Target|string $target + * @return Zend_Pdf_Outline + */ + abstract public function setTarget($target = null); + + /** + * Get outline options + * + * @return array + */ + public function getOptions() + { + return array('title' => $this->_title, + 'open' => $this->_open, + 'color' => $this->_color, + 'italic' => $this->_italic, + 'bold' => $this->_bold, + 'target' => $this->_target); + } + + /** + * Set outline options + * + * @param array $options + * @return Zend_Pdf_Action + * @throws Zend_Pdf_Exception + */ + public function setOptions(array $options) + { + foreach ($options as $key => $value) { + switch ($key) { + case 'title': + $this->setTitle($value); + break; + + case 'open': + $this->setIsOpen($value); + break; + + case 'color': + $this->setColor($value); + break; + case 'italic': + $this->setIsItalic($value); + break; + + case 'bold': + $this->setIsBold($value); + break; + + case 'target': + $this->setTarget($value); + break; + + default: + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception("Unknown option name - '$key'."); + break; + } + } + + return $this; + } + + /** + * Create new Outline object + * + * It provides two forms of input parameters: + * + * 1. Zend_Pdf_Outline::create(string $title[, Zend_Pdf_Target $target]) + * 2. Zend_Pdf_Outline::create(array $options) + * + * Second form allows to provide outline options as an array. + * The followed options are supported: + * 'title' - string, outline title, required + * 'open' - boolean, true if outline entry is open (default value is false) + * 'color' - Zend_Pdf_Color_Rgb object, true if outline entry is open (default value is null - black) + * 'italic' - boolean, true if outline entry is displayed in italic (default value is false) + * 'bold' - boolean, true if outline entry is displayed in bold (default value is false) + * 'target' - Zend_Pdf_Target object or string, outline item destination + * + * @return Zend_Pdf_Outline + * @throws Zend_Pdf_Exception + */ + public static function create($param1, $param2 = null) + { + require_once 'Zend/Pdf/Outline/Created.php'; + if (is_string($param1)) { + if ($param2 !== null && !($param2 instanceof Zend_Pdf_Target || is_string($param2))) { + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception('Outline create method takes $title (string) and $target (Zend_Pdf_Target or string) or an array as an input'); + } + + return new Zend_Pdf_Outline_Created(array('title' => $param1, + 'target' => $param2)); + } else { + if (!is_array($param1) || $param2 !== null) { + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception('Outline create method takes $title (string) and $destination (Zend_Pdf_Destination) or an array as an input'); + } + + return new Zend_Pdf_Outline_Created($param1); + } + } + + /** + * Returns number of the total number of open items at all levels of the outline. + * + * @internal + * @return integer + */ + public function openOutlinesCount() + { + $count = 1; // Include this outline + + if ($this->isOpen()) { + foreach ($this->childOutlines as $child) { + $count += $child->openOutlinesCount(); + } + } + + return $count; + } + + /** + * Dump Outline and its child outlines into PDF structures + * + * Returns dictionary indirect object or reference + * + * @param Zend_Pdf_ElementFactory $factory object factory for newly created indirect objects + * @param boolean $updateNavigation Update navigation flag + * @param Zend_Pdf_Element $parent Parent outline dictionary reference + * @param Zend_Pdf_Element $prev Previous outline dictionary reference + * @param SplObjectStorage $processedOutlines List of already processed outlines + * @return Zend_Pdf_Element + */ + abstract public function dumpOutline(Zend_Pdf_ElementFactory_Interface $factory, + $updateNavigation, + Zend_Pdf_Element $parent, + Zend_Pdf_Element $prev = null, + SplObjectStorage $processedOutlines = null); + + + //////////////////////////////////////////////////////////////////////// + // RecursiveIterator interface methods + ////////////// + + /** + * Returns the child outline. + * + * @return Zend_Pdf_Outline + */ + public function current() + { + return current($this->childOutlines); + } + + /** + * Returns current iterator key + * + * @return integer + */ + public function key() + { + return key($this->childOutlines); + } + + /** + * Go to next child + */ + public function next() + { + return next($this->childOutlines); + } + + /** + * Rewind children + */ + public function rewind() + { + return reset($this->childOutlines); + } + + /** + * Check if current position is valid + * + * @return boolean + */ + public function valid() + { + return current($this->childOutlines) !== false; + } + + /** + * Returns the child outline. + * + * @return Zend_Pdf_Outline|null + */ + public function getChildren() + { + return current($this->childOutlines); + } + + /** + * Implements RecursiveIterator interface. + * + * @return bool whether container has any pages + */ + public function hasChildren() + { + return count($this->childOutlines) > 0; + } + + + //////////////////////////////////////////////////////////////////////// + // Countable interface methods + ////////////// + + /** + * count() + * + * @return int + */ + public function count() + { + return count($this->childOutlines); + } +}