AlphaPDF   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 29
dl 0
loc 64
rs 10
c 1
b 0
f 0
wmc 12

7 Methods

Rating   Name   Duplication   Size   Complexity  
A SetExtGState() 0 3 1
A AddExtGState() 0 5 1
A SetAlpha() 0 5 1
A _putextgstates() 0 12 3
A _putresources() 0 4 1
A _putresourcedict() 0 7 2
A _enddoc() 0 5 3
1
<?php
2
/**
3
 * @author: Martin Hall-May <[email protected]?subject=Transparency>
4
 */
5
6
namespace Royopa\AlphaPDF;
7
8
class AlphaPDF extends Fpdi
9
{
10
    protected $extgstates = array();
11
    protected $angle = 0;
12
    protected $PDFVersion = 1.4;
13
14
    // alpha: real value from 0 (transparent) to 1 (opaque)
15
    // bm:    blend mode, one of the following:
16
    //          Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn,
17
    //          HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity
18
    public function SetAlpha($alpha, $bm='Normal')
19
    {
20
        // set alpha for stroking (CA) and non-stroking (ca) operations
21
        $gs = $this->AddExtGState(array('ca'=>$alpha, 'CA'=>$alpha, 'BM'=>'/'.$bm));
22
        $this->SetExtGState($gs);
23
    }
24
25
    public function AddExtGState($parms)
26
    {
27
        $n = count($this->extgstates)+1;
28
        $this->extgstates[$n]['parms'] = $parms;
29
        return $n;
30
    }
31
32
    public function SetExtGState($gs)
33
    {
34
        $this->_out(sprintf('/GS%d gs', $gs));
35
    }
36
37
    public function _enddoc()
38
    {
39
        if(!empty($this->extgstates) && $this->PDFVersion<'1.4')
40
            $this->PDFVersion='1.4';
41
        parent::_enddoc();
42
    }
43
44
    public function _putextgstates()
45
    {
46
		$counter = count($this->extgstates); 
47
		for ($i = 1; $i <= $counter; $i++)
48
        {
49
            $this->_newobj();
50
            $this->extgstates[$i]['n'] = $this->n;
51
            $this->_out('<</Type /ExtGState');
52
            foreach ($this->extgstates[$i]['parms'] as $k=>$v)
53
                $this->_out('/'.$k.' '.$v);
54
            $this->_out('>>');
55
            $this->_out('endobj');
56
        }
57
    }
58
59
    public function _putresourcedict()
60
    {
61
        parent::_putresourcedict();
62
        $this->_out('/ExtGState <<');
63
        foreach($this->extgstates as $k=>$extgstate)
64
            $this->_out('/GS'.$k.' '.$extgstate['n'].' 0 R');
65
        $this->_out('>>');
66
    }
67
68
    public function _putresources()
69
    {
70
        $this->_putextgstates();
71
        parent::_putresources();
72
    }
73
}
74