web/lib/Zend/Pdf/Style.php
changeset 64 162c1de6545a
parent 19 1c2f13fd785c
child 68 ecaf28ffe26e
equal deleted inserted replaced
63:5b37998e522e 64:162c1de6545a
       
     1 <?php
       
     2 /**
       
     3  * Zend Framework
       
     4  *
       
     5  * LICENSE
       
     6  *
       
     7  * This source file is subject to the new BSD license that is bundled
       
     8  * with this package in the file LICENSE.txt.
       
     9  * It is also available through the world-wide-web at this URL:
       
    10  * http://framework.zend.com/license/new-bsd
       
    11  * If you did not receive a copy of the license and are unable to
       
    12  * obtain it through the world-wide-web, please send an email
       
    13  * to license@zend.com so we can send you a copy immediately.
       
    14  *
       
    15  * @category   Zend
       
    16  * @package    Zend_Pdf
       
    17  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    18  * @license    http://framework.zend.com/license/new-bsd     New BSD License
       
    19  * @version    $Id: Style.php 22908 2010-08-25 20:52:47Z alexander $
       
    20  */
       
    21 
       
    22 
       
    23 /**
       
    24  * Style object.
       
    25  * Style object doesn't directly correspond to any PDF file object.
       
    26  * It's utility class, used as a container for style information.
       
    27  * It's used by Zend_Pdf_Page class in draw operations.
       
    28  *
       
    29  * @package    Zend_Pdf
       
    30  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    31  * @license    http://framework.zend.com/license/new-bsd     New BSD License
       
    32  */
       
    33 class Zend_Pdf_Style
       
    34 {
       
    35     /**
       
    36      * Fill color.
       
    37      * Used to fill geometric shapes or text.
       
    38      *
       
    39      * @var Zend_Pdf_Color|null
       
    40      */
       
    41     private $_fillColor = null;
       
    42 
       
    43     /**
       
    44      * Line color.
       
    45      * Current color, used for lines and font outlines.
       
    46      *
       
    47      * @var Zend_Pdf_Color|null
       
    48      */
       
    49 
       
    50     private $_color;
       
    51 
       
    52     /**
       
    53      * Line width.
       
    54      *
       
    55      * @var Zend_Pdf_Element_Numeric
       
    56      */
       
    57     private $_lineWidth;
       
    58 
       
    59     /**
       
    60      * Array which describes line dashing pattern.
       
    61      * It's array of numeric:
       
    62      * array($on_length, $off_length, $on_length, $off_length, ...)
       
    63      *
       
    64      * @var array
       
    65      */
       
    66     private $_lineDashingPattern;
       
    67 
       
    68     /**
       
    69      * Line dashing phase
       
    70      *
       
    71      * @var float
       
    72      */
       
    73     private $_lineDashingPhase;
       
    74 
       
    75     /**
       
    76      * Current font
       
    77      *
       
    78      * @var Zend_Pdf_Resource_Font
       
    79      */
       
    80     private $_font;
       
    81 
       
    82     /**
       
    83      * Font size
       
    84      *
       
    85      * @var float
       
    86      */
       
    87     private $_fontSize;
       
    88 
       
    89 
       
    90 
       
    91     /**
       
    92      * Create style.
       
    93      *
       
    94      * @param Zend_Pdf_Style $anotherStyle
       
    95      */
       
    96     public function __construct($anotherStyle = null)
       
    97     {
       
    98         if ($anotherStyle !== null) {
       
    99             $this->_fillColor          = $anotherStyle->_fillColor;
       
   100             $this->_color              = $anotherStyle->_color;
       
   101             $this->_lineWidth          = $anotherStyle->_lineWidth;
       
   102             $this->_lineDashingPattern = $anotherStyle->_lineDashingPattern;
       
   103             $this->_lineDashingPhase   = $anotherStyle->_lineDashingPhase;
       
   104             $this->_font               = $anotherStyle->_font;
       
   105             $this->_fontSize           = $anotherStyle->_fontSize;
       
   106         }
       
   107     }
       
   108 
       
   109 
       
   110     /**
       
   111      * Set fill color.
       
   112      *
       
   113      * @param Zend_Pdf_Color $color
       
   114      */
       
   115     public function setFillColor(Zend_Pdf_Color $color)
       
   116     {
       
   117         $this->_fillColor = $color;
       
   118     }
       
   119 
       
   120     /**
       
   121      * Set line color.
       
   122      *
       
   123      * @param Zend_Pdf_Color $color
       
   124      */
       
   125     public function setLineColor(Zend_Pdf_Color $color)
       
   126     {
       
   127         $this->_color = $color;
       
   128     }
       
   129 
       
   130     /**
       
   131      * Set line width.
       
   132      *
       
   133      * @param float $width
       
   134      */
       
   135     public function setLineWidth($width)
       
   136     {
       
   137         require_once 'Zend/Pdf/Element/Numeric.php';
       
   138         $this->_lineWidth = new Zend_Pdf_Element_Numeric($width);
       
   139     }
       
   140 
       
   141 
       
   142     /**
       
   143      * Set line dashing pattern
       
   144      *
       
   145      * @param array $pattern
       
   146      * @param float $phase
       
   147      */
       
   148     public function setLineDashingPattern($pattern, $phase = 0)
       
   149     {
       
   150         require_once 'Zend/Pdf/Page.php';
       
   151         if ($pattern === Zend_Pdf_Page::LINE_DASHING_SOLID) {
       
   152             $pattern = array();
       
   153             $phase   = 0;
       
   154         }
       
   155 
       
   156         require_once 'Zend/Pdf/Element/Numeric.php';
       
   157         $this->_lineDashingPattern = $pattern;
       
   158         $this->_lineDashingPhase   = new Zend_Pdf_Element_Numeric($phase);
       
   159     }
       
   160 
       
   161 
       
   162     /**
       
   163      * Set current font.
       
   164      *
       
   165      * @param Zend_Pdf_Resource_Font $font
       
   166      * @param float $fontSize
       
   167      */
       
   168     public function setFont(Zend_Pdf_Resource_Font $font, $fontSize)
       
   169     {
       
   170         $this->_font = $font;
       
   171         $this->_fontSize = $fontSize;
       
   172     }
       
   173 
       
   174     /**
       
   175      * Modify current font size
       
   176      *
       
   177      * @param float $fontSize
       
   178      */
       
   179     public function setFontSize($fontSize)
       
   180     {
       
   181         $this->_fontSize = $fontSize;
       
   182     }
       
   183 
       
   184     /**
       
   185      * Get fill color.
       
   186      *
       
   187      * @return Zend_Pdf_Color|null
       
   188      */
       
   189     public function getFillColor()
       
   190     {
       
   191         return $this->_fillColor;
       
   192     }
       
   193 
       
   194     /**
       
   195      * Get line color.
       
   196      *
       
   197      * @return Zend_Pdf_Color|null
       
   198      */
       
   199     public function getLineColor()
       
   200     {
       
   201         return $this->_color;
       
   202     }
       
   203 
       
   204     /**
       
   205      * Get line width.
       
   206      *
       
   207      * @return float
       
   208      */
       
   209     public function getLineWidth()
       
   210     {
       
   211         return $this->_lineWidth->value;
       
   212     }
       
   213 
       
   214     /**
       
   215      * Get line dashing pattern
       
   216      *
       
   217      * @return array
       
   218      */
       
   219     public function getLineDashingPattern()
       
   220     {
       
   221         return $this->_lineDashingPattern;
       
   222     }
       
   223 
       
   224 
       
   225     /**
       
   226      * Get current font.
       
   227      *
       
   228      * @return Zend_Pdf_Resource_Font $font
       
   229      */
       
   230     public function getFont()
       
   231     {
       
   232         return $this->_font;
       
   233     }
       
   234 
       
   235     /**
       
   236      * Get current font size
       
   237      *
       
   238      * @return float $fontSize
       
   239      */
       
   240     public function getFontSize()
       
   241     {
       
   242         return $this->_fontSize;
       
   243     }
       
   244 
       
   245     /**
       
   246      * Get line dashing phase
       
   247      *
       
   248      * @return float
       
   249      */
       
   250     public function getLineDashingPhase()
       
   251     {
       
   252         return $this->_lineDashingPhase->value;
       
   253     }
       
   254 
       
   255 
       
   256     /**
       
   257      * Dump style to a string, which can be directly inserted into content stream
       
   258      *
       
   259      * @return string
       
   260      */
       
   261     public function instructions()
       
   262     {
       
   263         $instructions = '';
       
   264 
       
   265         if ($this->_fillColor !== null) {
       
   266             $instructions .= $this->_fillColor->instructions(false);
       
   267         }
       
   268 
       
   269         if ($this->_color !== null) {
       
   270             $instructions .= $this->_color->instructions(true);
       
   271         }
       
   272 
       
   273         if ($this->_lineWidth !== null) {
       
   274             $instructions .= $this->_lineWidth->toString() . " w\n";
       
   275         }
       
   276 
       
   277         if ($this->_lineDashingPattern !== null) {
       
   278             require_once 'Zend/Pdf/Element/Array.php';
       
   279             $dashPattern = new Zend_Pdf_Element_Array();
       
   280 
       
   281             require_once 'Zend/Pdf/Element/Numeric.php';
       
   282             foreach ($this->_lineDashingPattern as $dashItem) {
       
   283                 $dashElement = new Zend_Pdf_Element_Numeric($dashItem);
       
   284                 $dashPattern->items[] = $dashElement;
       
   285             }
       
   286 
       
   287             $instructions .= $dashPattern->toString() . ' '
       
   288                            . $this->_lineDashingPhase->toString() . " d\n";
       
   289         }
       
   290 
       
   291         return $instructions;
       
   292     }
       
   293 
       
   294 }