PluginProbe
Visualizer – Tables & Charts Manager with Built-in AI Generator / 3.4.10
Visualizer – Tables & Charts Manager with Built-in AI Generator v3.4.10
4.0.8 4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.10.0 3.10.1 3.10.10 3.10.11 3.10.12 3.10.13 3.10.14 3.10.15 3.10.2 3.10.3 All 149 releases
visualizer / vendor / phpoffice / phpspreadsheet / src / PhpSpreadsheet / Writer / Pdf.php

Pdf.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.4.10, at vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Pdf.php

284 lines 9.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace PhpOffice\PhpSpreadsheet\Writer;
4
5 use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
6 use PhpOffice\PhpSpreadsheet\Shared\File;
7 use PhpOffice\PhpSpreadsheet\Spreadsheet;
8 use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
9 use PhpOffice\PhpSpreadsheet\Writer\Exception as WriterException;
10
11 abstract class Pdf extends Html
12 {
13 /**
14 * Temporary storage directory.
15 *
16 * @var string
17 */
18 protected $tempDir = '';
19
20 /**
21 * Font.
22 *
23 * @var string
24 */
25 protected $font = 'freesans';
26
27 /**
28 * Orientation (Over-ride).
29 *
30 * @var string
31 */
32 protected $orientation;
33
34 /**
35 * Paper size (Over-ride).
36 *
37 * @var int
38 */
39 protected $paperSize;
40
41 /**
42 * Temporary storage for Save Array Return type.
43 *
44 * @var string
45 */
46 private $saveArrayReturnType;
47
48 /**
49 * Paper Sizes xRef List.
50 *
51 * @var array
52 */
53 protected static $paperSizes = [
54 PageSetup::PAPERSIZE_LETTER => 'LETTER', // (8.5 in. by 11 in.)
55 PageSetup::PAPERSIZE_LETTER_SMALL => 'LETTER', // (8.5 in. by 11 in.)
56 PageSetup::PAPERSIZE_TABLOID => [792.00, 1224.00], // (11 in. by 17 in.)
57 PageSetup::PAPERSIZE_LEDGER => [1224.00, 792.00], // (17 in. by 11 in.)
58 PageSetup::PAPERSIZE_LEGAL => 'LEGAL', // (8.5 in. by 14 in.)
59 PageSetup::PAPERSIZE_STATEMENT => [396.00, 612.00], // (5.5 in. by 8.5 in.)
60 PageSetup::PAPERSIZE_EXECUTIVE => 'EXECUTIVE', // (7.25 in. by 10.5 in.)
61 PageSetup::PAPERSIZE_A3 => 'A3', // (297 mm by 420 mm)
62 PageSetup::PAPERSIZE_A4 => 'A4', // (210 mm by 297 mm)
63 PageSetup::PAPERSIZE_A4_SMALL => 'A4', // (210 mm by 297 mm)
64 PageSetup::PAPERSIZE_A5 => 'A5', // (148 mm by 210 mm)
65 PageSetup::PAPERSIZE_B4 => 'B4', // (250 mm by 353 mm)
66 PageSetup::PAPERSIZE_B5 => 'B5', // (176 mm by 250 mm)
67 PageSetup::PAPERSIZE_FOLIO => 'FOLIO', // (8.5 in. by 13 in.)
68 PageSetup::PAPERSIZE_QUARTO => [609.45, 779.53], // (215 mm by 275 mm)
69 PageSetup::PAPERSIZE_STANDARD_1 => [720.00, 1008.00], // (10 in. by 14 in.)
70 PageSetup::PAPERSIZE_STANDARD_2 => [792.00, 1224.00], // (11 in. by 17 in.)
71 PageSetup::PAPERSIZE_NOTE => 'LETTER', // (8.5 in. by 11 in.)
72 PageSetup::PAPERSIZE_NO9_ENVELOPE => [279.00, 639.00], // (3.875 in. by 8.875 in.)
73 PageSetup::PAPERSIZE_NO10_ENVELOPE => [297.00, 684.00], // (4.125 in. by 9.5 in.)
74 PageSetup::PAPERSIZE_NO11_ENVELOPE => [324.00, 747.00], // (4.5 in. by 10.375 in.)
75 PageSetup::PAPERSIZE_NO12_ENVELOPE => [342.00, 792.00], // (4.75 in. by 11 in.)
76 PageSetup::PAPERSIZE_NO14_ENVELOPE => [360.00, 828.00], // (5 in. by 11.5 in.)
77 PageSetup::PAPERSIZE_C => [1224.00, 1584.00], // (17 in. by 22 in.)
78 PageSetup::PAPERSIZE_D => [1584.00, 2448.00], // (22 in. by 34 in.)
79 PageSetup::PAPERSIZE_E => [2448.00, 3168.00], // (34 in. by 44 in.)
80 PageSetup::PAPERSIZE_DL_ENVELOPE => [311.81, 623.62], // (110 mm by 220 mm)
81 PageSetup::PAPERSIZE_C5_ENVELOPE => 'C5', // (162 mm by 229 mm)
82 PageSetup::PAPERSIZE_C3_ENVELOPE => 'C3', // (324 mm by 458 mm)
83 PageSetup::PAPERSIZE_C4_ENVELOPE => 'C4', // (229 mm by 324 mm)
84 PageSetup::PAPERSIZE_C6_ENVELOPE => 'C6', // (114 mm by 162 mm)
85 PageSetup::PAPERSIZE_C65_ENVELOPE => [323.15, 649.13], // (114 mm by 229 mm)
86 PageSetup::PAPERSIZE_B4_ENVELOPE => 'B4', // (250 mm by 353 mm)
87 PageSetup::PAPERSIZE_B5_ENVELOPE => 'B5', // (176 mm by 250 mm)
88 PageSetup::PAPERSIZE_B6_ENVELOPE => [498.90, 354.33], // (176 mm by 125 mm)
89 PageSetup::PAPERSIZE_ITALY_ENVELOPE => [311.81, 651.97], // (110 mm by 230 mm)
90 PageSetup::PAPERSIZE_MONARCH_ENVELOPE => [279.00, 540.00], // (3.875 in. by 7.5 in.)
91 PageSetup::PAPERSIZE_6_3_4_ENVELOPE => [261.00, 468.00], // (3.625 in. by 6.5 in.)
92 PageSetup::PAPERSIZE_US_STANDARD_FANFOLD => [1071.00, 792.00], // (14.875 in. by 11 in.)
93 PageSetup::PAPERSIZE_GERMAN_STANDARD_FANFOLD => [612.00, 864.00], // (8.5 in. by 12 in.)
94 PageSetup::PAPERSIZE_GERMAN_LEGAL_FANFOLD => 'FOLIO', // (8.5 in. by 13 in.)
95 PageSetup::PAPERSIZE_ISO_B4 => 'B4', // (250 mm by 353 mm)
96 PageSetup::PAPERSIZE_JAPANESE_DOUBLE_POSTCARD => [566.93, 419.53], // (200 mm by 148 mm)
97 PageSetup::PAPERSIZE_STANDARD_PAPER_1 => [648.00, 792.00], // (9 in. by 11 in.)
98 PageSetup::PAPERSIZE_STANDARD_PAPER_2 => [720.00, 792.00], // (10 in. by 11 in.)
99 PageSetup::PAPERSIZE_STANDARD_PAPER_3 => [1080.00, 792.00], // (15 in. by 11 in.)
100 PageSetup::PAPERSIZE_INVITE_ENVELOPE => [623.62, 623.62], // (220 mm by 220 mm)
101 PageSetup::PAPERSIZE_LETTER_EXTRA_PAPER => [667.80, 864.00], // (9.275 in. by 12 in.)
102 PageSetup::PAPERSIZE_LEGAL_EXTRA_PAPER => [667.80, 1080.00], // (9.275 in. by 15 in.)
103 PageSetup::PAPERSIZE_TABLOID_EXTRA_PAPER => [841.68, 1296.00], // (11.69 in. by 18 in.)
104 PageSetup::PAPERSIZE_A4_EXTRA_PAPER => [668.98, 912.76], // (236 mm by 322 mm)
105 PageSetup::PAPERSIZE_LETTER_TRANSVERSE_PAPER => [595.80, 792.00], // (8.275 in. by 11 in.)
106 PageSetup::PAPERSIZE_A4_TRANSVERSE_PAPER => 'A4', // (210 mm by 297 mm)
107 PageSetup::PAPERSIZE_LETTER_EXTRA_TRANSVERSE_PAPER => [667.80, 864.00], // (9.275 in. by 12 in.)
108 PageSetup::PAPERSIZE_SUPERA_SUPERA_A4_PAPER => [643.46, 1009.13], // (227 mm by 356 mm)
109 PageSetup::PAPERSIZE_SUPERB_SUPERB_A3_PAPER => [864.57, 1380.47], // (305 mm by 487 mm)
110 PageSetup::PAPERSIZE_LETTER_PLUS_PAPER => [612.00, 913.68], // (8.5 in. by 12.69 in.)
111 PageSetup::PAPERSIZE_A4_PLUS_PAPER => [595.28, 935.43], // (210 mm by 330 mm)
112 PageSetup::PAPERSIZE_A5_TRANSVERSE_PAPER => 'A5', // (148 mm by 210 mm)
113 PageSetup::PAPERSIZE_JIS_B5_TRANSVERSE_PAPER => [515.91, 728.50], // (182 mm by 257 mm)
114 PageSetup::PAPERSIZE_A3_EXTRA_PAPER => [912.76, 1261.42], // (322 mm by 445 mm)
115 PageSetup::PAPERSIZE_A5_EXTRA_PAPER => [493.23, 666.14], // (174 mm by 235 mm)
116 PageSetup::PAPERSIZE_ISO_B5_EXTRA_PAPER => [569.76, 782.36], // (201 mm by 276 mm)
117 PageSetup::PAPERSIZE_A2_PAPER => 'A2', // (420 mm by 594 mm)
118 PageSetup::PAPERSIZE_A3_TRANSVERSE_PAPER => 'A3', // (297 mm by 420 mm)
119 PageSetup::PAPERSIZE_A3_EXTRA_TRANSVERSE_PAPER => [912.76, 1261.42], // (322 mm by 445 mm)
120 ];
121
122 /**
123 * Create a new PDF Writer instance.
124 *
125 * @param Spreadsheet $spreadsheet Spreadsheet object
126 */
127 public function __construct(Spreadsheet $spreadsheet)
128 {
129 parent::__construct($spreadsheet);
130 $this->setUseInlineCss(true);
131 $this->tempDir = File::sysGetTempDir();
132 }
133
134 /**
135 * Get Font.
136 *
137 * @return string
138 */
139 public function getFont()
140 {
141 return $this->font;
142 }
143
144 /**
145 * Set font. Examples:
146 * 'arialunicid0-chinese-simplified'
147 * 'arialunicid0-chinese-traditional'
148 * 'arialunicid0-korean'
149 * 'arialunicid0-japanese'.
150 *
151 * @param string $fontName
152 *
153 * @return Pdf
154 */
155 public function setFont($fontName)
156 {
157 $this->font = $fontName;
158
159 return $this;
160 }
161
162 /**
163 * Get Paper Size.
164 *
165 * @return int
166 */
167 public function getPaperSize()
168 {
169 return $this->paperSize;
170 }
171
172 /**
173 * Set Paper Size.
174 *
175 * @param string $pValue Paper size see PageSetup::PAPERSIZE_*
176 *
177 * @return self
178 */
179 public function setPaperSize($pValue)
180 {
181 $this->paperSize = $pValue;
182
183 return $this;
184 }
185
186 /**
187 * Get Orientation.
188 *
189 * @return string
190 */
191 public function getOrientation()
192 {
193 return $this->orientation;
194 }
195
196 /**
197 * Set Orientation.
198 *
199 * @param string $pValue Page orientation see PageSetup::ORIENTATION_*
200 *
201 * @return self
202 */
203 public function setOrientation($pValue)
204 {
205 $this->orientation = $pValue;
206
207 return $this;
208 }
209
210 /**
211 * Get temporary storage directory.
212 *
213 * @return string
214 */
215 public function getTempDir()
216 {
217 return $this->tempDir;
218 }
219
220 /**
221 * Set temporary storage directory.
222 *
223 * @param string $pValue Temporary storage directory
224 *
225 * @throws WriterException when directory does not exist
226 *
227 * @return self
228 */
229 public function setTempDir($pValue)
230 {
231 if (is_dir($pValue)) {
232 $this->tempDir = $pValue;
233 } else {
234 throw new WriterException("Directory does not exist: $pValue");
235 }
236
237 return $this;
238 }
239
240 /**
241 * Save Spreadsheet to PDF file, pre-save.
242 *
243 * @param string $pFilename Name of the file to save as
244 *
245 * @throws WriterException
246 *
247 * @return resource
248 */
249 protected function prepareForSave($pFilename)
250 {
251 // garbage collect
252 $this->spreadsheet->garbageCollect();
253
254 $this->saveArrayReturnType = Calculation::getArrayReturnType();
255 Calculation::setArrayReturnType(Calculation::RETURN_ARRAY_AS_VALUE);
256
257 // Open file
258 $fileHandle = fopen($pFilename, 'w');
259 if ($fileHandle === false) {
260 throw new WriterException("Could not open file $pFilename for writing.");
261 }
262
263 // Set PDF
264 $this->isPdf = true;
265 // Build CSS
266 $this->buildCSS(true);
267
268 return $fileHandle;
269 }
270
271 /**
272 * Save PhpSpreadsheet to PDF file, post-save.
273 *
274 * @param resource $fileHandle
275 */
276 protected function restoreStateAfterSave($fileHandle)
277 {
278 // Close file
279 fclose($fileHandle);
280
281 Calculation::setArrayReturnType($this->saveArrayReturnType);
282 }
283 }
284