Completed
Push — 4.0 ( ca6fdf )
by Hannes
50:39 queued 49:27
created

TcpdiDriver::merge()   B

Complexity

Conditions 6
Paths 15

Size

Total Lines 29

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
nc 15
nop 1
dl 0
loc 29
rs 8.8337
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace iio\libmergepdf\Driver;
6
7
use iio\libmergepdf\Source\SourceInterface;
8
use iio\libmergepdf\Pages;
9
use iio\libmergepdf\Exception;
10
11
class TcpdiDriver implements DriverInterface
12
{
13
    /**
14
     * @var \TCPDI
15
     */
16
    private $tcpdi;
17
18
    public function __construct(\TCPDI $tcpdi = null)
19
    {
20
        $this->tcpdi = $tcpdi ?: new \TCPDI;
21
    }
22
23
    public function merge(SourceInterface ...$sources): string
24
    {
25
        /** @var string Name of source being processed */
26
        $name = '';
27
28
        try {
29
            $tcpdi = clone $this->tcpdi;
30
31
            foreach ($sources as $source) {
32
                $name = $source->getName();
33
                $pageCount = $tcpdi->setSourceData($source->getContents());
34
                $pages = $source->getPages()->isEmpty() ? $source->getPages() : new Pages("1-$pageCount");
35
36
                foreach ($pages as $page) {
37
                    $template = $tcpdi->importPage($page);
38
                    $size = $tcpdi->getTemplateSize($template);
39
                    $tcpdi->AddPage(
40
                        $size['w'] > $size['h'] ? 'L' : 'P',
41
                        [$size['w'], $size['h']]
42
                    );
43
                    $tcpdi->useTemplate($template);
44
                }
45
            }
46
47
            return $tcpdi->Output('', 'S');
48
        } catch (\Exception $e) {
49
            throw new Exception("'{$e->getMessage()}' in '{$name}'", 0, $e);
50
        }
51
    }
52
}
53