Completed
Push — master ( 7a405c...245614 )
by Ben
02:22
created

PdfWriter::writeXrefTable()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 1 Features 0
Metric Value
c 3
b 1
f 0
dl 0
loc 14
rs 9.4286
cc 2
eloc 8
nc 2
nop 0
1
<?php
2
/**
3
 * BaconPdf
4
 *
5
 * @link      http://github.com/Bacon/BaconPdf For the canonical source repository
6
 * @copyright 2015 Ben Scholzen (DASPRiD)
7
 * @license   http://opensource.org/licenses/BSD-2-Clause Simplified BSD License
8
 */
9
10
namespace Bacon\Pdf;
11
12
use Bacon\Pdf\Encryption\EncryptionInterface;
13
use Bacon\Pdf\Options\PdfWriterOptions;
14
use Bacon\Pdf\Writer\DocumentWriter;
15
use Bacon\Pdf\Writer\ObjectWriter;
16
use Bacon\Pdf\Writer\PageWriter;
17
use SplFileObject;
18
19
class PdfWriter
20
{
21
    /**
22
     * @var PdfWriterOptions
23
     */
24
    private $options;
25
26
    /**
27
     * @var ObjectWriter
28
     */
29
    private $objectWriter;
30
31
    /**
32
     * @var DocumentWriter
33
     */
34
    private $documentWriter;
35
36
    /**
37
     * @var EncryptionInterface
38
     */
39
    private $encryption;
40
41
    /**
42
     * @param SplFileObject    $fileObject
43
     * @param PdfWriterOptions $options
44
     */
45
    public function __construct(SplFileObject $fileObject, PdfWriterOptions $options = null)
46
    {
47
        if (null === $options) {
48
            $options = new PdfWriterOptions();
49
        }
50
51
        $this->options = $options;
52
53
        $fileIdentifier = md5(microtime(), true);
54
        $this->objectWriter = new ObjectWriter($fileObject);
55
        $this->documentWriter = new DocumentWriter($this->objectWriter, $options, $fileIdentifier);
56
        $this->encryption = $options->getEncryption($fileIdentifier);
57
    }
58
59
    /**
60
     * Returns the document information object.
61
     *
62
     * @return DocumentInformation
63
     */
64
    public function getDocumentInformation()
65
    {
66
        return $this->documentWriter->getDocumentInformation();
67
    }
68
69
    /**
70
     * Adds a page to the document.
71
     *
72
     * @param  float $width
73
     * @param  float $height
74
     * @return Page
75
     */
76
    public function addPage($width, $height)
77
    {
78
        $pageWriter = new PageWriter($this->objectWriter);
79
        $this->documentWriter->addPageWriter($pageWriter);
80
81
        return new Page($pageWriter, $width, $height);
82
    }
83
84
    /**
85
     * Ends the document by writing all pending data.
86
     *
87
     * While the PDF writer will remove all references to the passed in file object in itself to avoid further writing
88
     * and to allow the file pointer to be closed, the callee may still have a reference to it. If that is the case,
89
     * make sure to unset it if you don't need it.
90
     *
91
     * Any further attempts to append data to the PDF writer will result in an exception.
92
     */
93
    public function endDocument()
94
    {
95
        $this->documentWriter->endDocument($this->encryption);
96
    }
97
98
    /**
99
     * Creates a PDF writer which writes everything to a file.
100
     *
101
     * @param  string                $filename
102
     * @param  PdfWriterOptions|null $options
103
     * @return static
104
     */
105
    public static function toFile($filename, PdfWriterOptions $options = null)
106
    {
107
        return new static(new SplFileObject($filename, 'wb'), $options);
108
    }
109
110
    /**
111
     * Creates a PDF writer which outputs everything to the STDOUT.
112
     *
113
     * Make sure to send the appropriate headers beforehand if you are in a web environment.
114
     *
115
     * @param  PdfWriterOptions|null $options
116
     * @return static
117
     */
118
    public static function output(PdfWriterOptions $options = null)
119
    {
120
        return new static(new SplFileObject('php://stdout', 'wb'), $options);
121
    }
122
}
123