diff -r 5b37998e522e -r 162c1de6545a web/lib/Zend/Pdf/Element/Dictionary.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/Zend/Pdf/Element/Dictionary.php Fri Mar 11 15:05:35 2011 +0100 @@ -0,0 +1,236 @@ + Zend_Pdf_Element) + * + * @var array + */ + private $_items = array(); + + + /** + * Object constructor + * + * @param array $val - array of Zend_Pdf_Element objects + * @throws Zend_Pdf_Exception + */ + public function __construct($val = null) + { + if ($val === null) { + return; + } else if (!is_array($val)) { + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception('Argument must be an array'); + } + + foreach ($val as $name => $element) { + if (!$element instanceof Zend_Pdf_Element) { + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception('Array elements must be Zend_Pdf_Element objects'); + } + if (!is_string($name)) { + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception('Array keys must be strings'); + } + $this->_items[$name] = $element; + } + } + + + /** + * Add element to an array + * + * @name Zend_Pdf_Element_Name $name + * @param Zend_Pdf_Element $val - Zend_Pdf_Element object + * @throws Zend_Pdf_Exception + */ + public function add(Zend_Pdf_Element_Name $name, Zend_Pdf_Element $val) + { + $this->_items[$name->value] = $val; + } + + /** + * Return dictionary keys + * + * @return array + */ + public function getKeys() + { + return array_keys($this->_items); + } + + + /** + * Get handler + * + * @param string $property + * @return Zend_Pdf_Element | null + */ + public function __get($item) + { + $element = isset($this->_items[$item]) ? $this->_items[$item] + : null; + + return $element; + } + + /** + * Set handler + * + * @param string $property + * @param mixed $value + */ + public function __set($item, $value) + { + if ($value === null) { + unset($this->_items[$item]); + } else { + $this->_items[$item] = $value; + } + } + + /** + * Return type of the element. + * + * @return integer + */ + public function getType() + { + return Zend_Pdf_Element::TYPE_DICTIONARY; + } + + + /** + * Return object as string + * + * @param Zend_Pdf_Factory $factory + * @return string + */ + public function toString($factory = null) + { + $outStr = '<<'; + $lastNL = 0; + + foreach ($this->_items as $name => $element) { + if (!is_object($element)) { + require_once 'Zend/Pdf/Exception.php'; + throw new Zend_Pdf_Exception('Wrong data'); + } + + if (strlen($outStr) - $lastNL > 128) { + $outStr .= "\n"; + $lastNL = strlen($outStr); + } + + $nameObj = new Zend_Pdf_Element_Name($name); + $outStr .= $nameObj->toString($factory) . ' ' . $element->toString($factory) . ' '; + } + $outStr .= '>>'; + + return $outStr; + } + + /** + * Detach PDF object from the factory (if applicable), clone it and attach to new factory. + * + * @param Zend_Pdf_ElementFactory $factory The factory to attach + * @param array &$processed List of already processed indirect objects, used to avoid objects duplication + * @param integer $mode Cloning mode (defines filter for objects cloning) + * @returns Zend_Pdf_Element + * @throws Zend_Pdf_Exception + */ + public function makeClone(Zend_Pdf_ElementFactory $factory, array &$processed, $mode) + { + if (isset($this->_items['Type'])) { + if ($this->_items['Type']->value == 'Pages') { + // It's a page tree node + // skip it and its children + return new Zend_Pdf_Element_Null(); + } + + if ($this->_items['Type']->value == 'Page' && + $mode == Zend_Pdf_Element::CLONE_MODE_SKIP_PAGES + ) { + // It's a page node, skip it + return new Zend_Pdf_Element_Null(); + } + } + + $newDictionary = new self(); + foreach ($this->_items as $key => $value) { + $newDictionary->_items[$key] = $value->makeClone($factory, $processed, $mode); + } + + return $newDictionary; + } + + /** + * Set top level parent indirect object. + * + * @param Zend_Pdf_Element_Object $parent + */ + public function setParentObject(Zend_Pdf_Element_Object $parent) + { + parent::setParentObject($parent); + + foreach ($this->_items as $item) { + $item->setParentObject($parent); + } + } + + /** + * Convert PDF element to PHP type. + * + * Dictionary is returned as an associative array + * + * @return mixed + */ + public function toPhp() + { + $phpArray = array(); + + foreach ($this->_items as $itemName => $item) { + $phpArray[$itemName] = $item->toPhp(); + } + + return $phpArray; + } +}