File indexing completed on 2024-12-22 05:36:57

0001 <?php
0002 /**
0003  * Zend Framework
0004  *
0005  * LICENSE
0006  *
0007  * This source file is subject to the new BSD license that is bundled
0008  * with this package in the file LICENSE.txt.
0009  * It is also available through the world-wide-web at this URL:
0010  * http://framework.zend.com/license/new-bsd
0011  * If you did not receive a copy of the license and are unable to
0012  * obtain it through the world-wide-web, please send an email
0013  * to license@zend.com so we can send you a copy immediately.
0014  *
0015  * @category   Zend
0016  * @package    Zend_Pdf
0017  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0018  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0019  * @version    $Id$
0020  */
0021 
0022 
0023 /**
0024  * PDF file Resource abstraction
0025  *
0026  * @package    Zend_Pdf
0027  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0028  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0029  */
0030 abstract class Zend_Pdf_Resource
0031 {
0032     /**
0033      * Each Pdf resource (fonts, images, ...) interacts with a PDF itself.
0034      * It creates appropriate PDF objects, structures and sometime embedded files.
0035      * Resources are referenced in content streams by names, which are stored in
0036      * a page resource dictionaries.
0037      *
0038      * Thus, resources must be attached to the PDF.
0039      *
0040      * Resource abstraction uses own PDF object factory to store all necessary information.
0041      * At the render time internal object factory is appended to the global PDF file
0042      * factory.
0043      *
0044      * Resource abstraction also cashes information about rendered PDF files and
0045      * doesn't duplicate resource description each time then Resource is rendered
0046      * (referenced).
0047      *
0048      * @var Zend_Pdf_ElementFactory_Interface
0049      */
0050     protected $_objectFactory;
0051 
0052     /**
0053      * Main resource object
0054      *
0055      * @var Zend_Pdf_Element_Object
0056      */
0057     protected $_resource;
0058 
0059     /**
0060      * Object constructor.
0061      *
0062      * If resource is not a Zend_Pdf_Element object, then stream object with specified value is
0063      * generated.
0064      *
0065      * @param Zend_Pdf_Element|string $resource
0066      */
0067     public function __construct($resource)
0068     {
0069         if ($resource instanceof Zend_Pdf_Element_Object) {
0070             $this->_objectFactory = $resource->getFactory();
0071             $this->_resource      = $resource;
0072 
0073             return;
0074         }
0075 
0076         // require_once 'Zend/Pdf/ElementFactory.php';
0077 
0078         $this->_objectFactory = Zend_Pdf_ElementFactory::createFactory(1);
0079         if ($resource instanceof Zend_Pdf_Element) {
0080             $this->_resource  = $this->_objectFactory->newObject($resource);
0081         } else {
0082             $this->_resource  = $this->_objectFactory->newStreamObject($resource);
0083         }
0084     }
0085 
0086     /**
0087      * Clone page, extract it and dependent objects from the current document,
0088      * so it can be used within other docs.
0089      */
0090     public function __clone()
0091     {
0092         /** @todo implementation*/
0093 
0094 //        $factory = Zend_Pdf_ElementFactory::createFactory(1);
0095 //        $processed = array();
0096 //
0097 //        // Clone dictionary object.
0098 //        // Do it explicitly to prevent sharing resource attributes between different
0099 //        // results of clone operation (other resources are still shared)
0100 //        $dictionary = new Zend_Pdf_Element_Dictionary();
0101 //        foreach ($this->_pageDictionary->getKeys() as $key) {
0102 //         $dictionary->$key = $this->_pageDictionary->$key->makeClone($factory->getFactory(),
0103 //                                                                     $processed,
0104 //                                                                     Zend_Pdf_Element::CLONE_MODE_SKIP_PAGES);
0105 //        }
0106 //
0107 //        $this->_pageDictionary = $factory->newObject($dictionary);
0108 //        $this->_objectFactory  = $factory;
0109 //        $this->_attached       = false;
0110 //        $this->_style          = null;
0111 //        $this->_font           = null;
0112     }
0113 
0114     /**
0115      * Clone resource, extract it and dependent objects from the current document,
0116      * so it can be used within other docs.
0117      *
0118      * @internal
0119      * @param Zend_Pdf_ElementFactory_Interface $factory
0120      * @param array $processed
0121      * @return Zend_Pdf_Page
0122      */
0123     public function cloneResource($factory, &$processed)
0124     {
0125         /** @todo implementation*/
0126 
0127 //        // Clone dictionary object.
0128 //        // Do it explicitly to prevent sharing page attributes between different
0129 //        // results of clonePage() operation (other resources are still shared)
0130 //        $dictionary = new Zend_Pdf_Element_Dictionary();
0131 //        foreach ($this->_pageDictionary->getKeys() as $key) {
0132 //            $dictionary->$key = $this->_pageDictionary->$key->makeClone($factory->getFactory(),
0133 //                                                                        $processed,
0134 //                                                                        Zend_Pdf_Element::CLONE_MODE_SKIP_PAGES);
0135 //        }
0136 //
0137 //        $clonedPage = new Zend_Pdf_Page($factory->newObject($dictionary), $factory);
0138 //        $clonedPage->_attached = false;
0139 //
0140 //        return $clonedPage;
0141     }
0142 
0143     /**
0144      * Get resource.
0145      * Used to reference resource in an internal PDF data structures (resource dictionaries)
0146      *
0147      * @internal
0148      * @return Zend_Pdf_Element_Object
0149      */
0150     public function getResource()
0151     {
0152         return $this->_resource;
0153     }
0154 
0155     /**
0156      * Get factory.
0157      *
0158      * @internal
0159      * @return Zend_Pdf_ElementFactory_Interface
0160      */
0161     public function getFactory()
0162     {
0163         return $this->_objectFactory;
0164     }
0165 }