Process the object to be written.
76 {
77
78 $this->_data = '';
79
80 switch (get_class($this->_object)) {
81
82 case 'PHPExcel_Shared_Escher':
83 if ($dggContainer = $this->_object->getDggContainer()) {
85 $this->_data = $writer->close();
86 } else if ($dgContainer = $this->_object->getDgContainer()) {
88 $this->_data = $writer->close();
89 $this->_spOffsets = $writer->getSpOffsets();
90 $this->_spTypes = $writer->getSpTypes();
91 }
92 break;
93
94 case 'PHPExcel_Shared_Escher_DggContainer':
95
96
97
98 $innerData = '';
99
100
101 $recVer = 0x0;
102 $recInstance = 0x0000;
103 $recType = 0xF006;
104
105 $recVerInstance = $recVer;
106 $recVerInstance |= $recInstance << 4;
107
108
109 $dggData =
110 pack('VVVV'
111 , $this->_object->getSpIdMax()
112 , $this->_object->getCDgSaved() + 1
113 , $this->_object->getCSpSaved()
114 , $this->_object->getCDgSaved()
115 );
116
117
118 $IDCLs = $this->_object->getIDCLs();
119
120 foreach ($IDCLs as $dgId => $maxReducedSpId) {
121 $dggData .= pack('VV', $dgId, $maxReducedSpId + 1);
122 }
123
124 $header = pack(
'vvV', $recVerInstance, $recType, strlen($dggData));
125 $innerData .=
$header . $dggData;
126
127
128 if ($bstoreContainer = $this->_object->getBstoreContainer()) {
130 $innerData .= $writer->close();
131 }
132
133
134 $recVer = 0xF;
135 $recInstance = 0x0000;
136 $recType = 0xF000;
137 $length = strlen($innerData);
138
139 $recVerInstance = $recVer;
140 $recVerInstance |= $recInstance << 4;
141
142 $header = pack(
'vvV', $recVerInstance, $recType, $length);
143
144 $this->_data =
$header . $innerData;
145 break;
146
147 case 'PHPExcel_Shared_Escher_DggContainer_BstoreContainer':
148
149
150
151 $innerData = '';
152
153
154 if ($BSECollection = $this->_object->getBSECollection()) {
155 foreach ($BSECollection as $BSE) {
157 $innerData .= $writer->close();
158 }
159 }
160
161
162 $recVer = 0xF;
163 $recInstance = count($this->_object->getBSECollection());
164 $recType = 0xF001;
165 $length = strlen($innerData);
166
167 $recVerInstance = $recVer;
168 $recVerInstance |= $recInstance << 4;
169
170 $header = pack(
'vvV', $recVerInstance, $recType, $length);
171
172 $this->_data =
$header . $innerData;
173 break;
174
175 case 'PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE':
176
177
178
179 $innerData = '';
180
181
182 if ($blip = $this->_object->getBlip()) {
184 $innerData .= $writer->close();
185 }
186
187
189
190 $btWin32 = $this->_object->getBlipType();
191 $btMacOS = $this->_object->getBlipType();
192 $data .= pack(
'CC', $btWin32, $btMacOS);
193
194 $rgbUid = pack('VVVV', 0,0,0,0);
196
197 $tag = 0;
198 $size = strlen($innerData);
199 $cRef = 1;
200 $foDelay = 0;
201 $unused1 = 0x0;
202 $cbName = 0x0;
203 $unused2 = 0x0;
204 $unused3 = 0x0;
205 $data .= pack(
'vVVVCCCC', $tag,
$size, $cRef, $foDelay, $unused1, $cbName, $unused2, $unused3);
206
208
209
210 $recVer = 0x2;
211 $recInstance = $this->_object->getBlipType();
212 $recType = 0xF007;
213 $length = strlen(
$data);
214
215 $recVerInstance = $recVer;
216 $recVerInstance |= $recInstance << 4;
217
218 $header = pack(
'vvV', $recVerInstance, $recType, $length);
219
221
222 $this->_data .=
$data;
223 break;
224
225 case 'PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip':
226
227
228
229 switch ($this->_object->getParent()->getBlipType()) {
230
232
233 $innerData = '';
234
235 $rgbUid1 = pack('VVVV', 0,0,0,0);
236 $innerData .= $rgbUid1;
237
238 $tag = 0xFF;
239 $innerData .= pack('C', $tag);
240
241 $innerData .= $this->_object->getData();
242
243 $recVer = 0x0;
244 $recInstance = 0x46A;
245 $recType = 0xF01D;
246 $length = strlen($innerData);
247
248 $recVerInstance = $recVer;
249 $recVerInstance |= $recInstance << 4;
250
251 $header = pack(
'vvV', $recVerInstance, $recType, $length);
252
254
255 $this->_data .= $innerData;
256 break;
257
259
260 $innerData = '';
261
262 $rgbUid1 = pack('VVVV', 0,0,0,0);
263 $innerData .= $rgbUid1;
264
265 $tag = 0xFF;
266 $innerData .= pack('C', $tag);
267
268 $innerData .= $this->_object->getData();
269
270 $recVer = 0x0;
271 $recInstance = 0x6E0;
272 $recType = 0xF01E;
273 $length = strlen($innerData);
274
275 $recVerInstance = $recVer;
276 $recVerInstance |= $recInstance << 4;
277
278 $header = pack(
'vvV', $recVerInstance, $recType, $length);
279
281
282 $this->_data .= $innerData;
283 break;
284
285 }
286 break;
287
288 case 'PHPExcel_Shared_Escher_DgContainer':
289
290
291
292 $innerData = '';
293
294
295 $recVer = 0x0;
296 $recInstance = $this->_object->getDgId();
297 $recType = 0xF008;
298 $length = 8;
299
300 $recVerInstance = $recVer;
301 $recVerInstance |= $recInstance << 4;
302
303 $header = pack(
'vvV', $recVerInstance, $recType, $length);
304
305
306 $countShapes = count($this->_object->getSpgrContainer()->getChildren());
307 $innerData .=
$header . pack(
'VV', $countShapes, $this->_object->getLastSpId());
308
309
310
311 if ($spgrContainer = $this->_object->getSpgrContainer()) {
313 $innerData .= $writer->close();
314
315
316 $spOffsets = $writer->getSpOffsets();
317 $spTypes = $writer->getSpTypes();
318
319
320 foreach ($spOffsets as & $spOffset) {
321 $spOffset += 24;
322 }
323
324 $this->_spOffsets = $spOffsets;
325 $this->_spTypes = $spTypes;
326 }
327
328
329 $recVer = 0xF;
330 $recInstance = 0x0000;
331 $recType = 0xF002;
332 $length = strlen($innerData);
333
334 $recVerInstance = $recVer;
335 $recVerInstance |= $recInstance << 4;
336
337 $header = pack(
'vvV', $recVerInstance, $recType, $length);
338
339 $this->_data =
$header . $innerData;
340 break;
341
342 case 'PHPExcel_Shared_Escher_DgContainer_SpgrContainer':
343
344
345
346 $innerData = '';
347
348
349 $totalSize = 8;
350 $spOffsets = array();
351 $spTypes = array();
352
353
354 foreach ($this->_object->getChildren() as $spContainer) {
356 $spData = $writer->close();
357 $innerData .= $spData;
358
359
360 $totalSize += strlen($spData);
361 $spOffsets[] = $totalSize;
362
363 $spTypes = array_merge($spTypes, $writer->getSpTypes());
364 }
365
366
367 $recVer = 0xF;
368 $recInstance = 0x0000;
369 $recType = 0xF003;
370 $length = strlen($innerData);
371
372 $recVerInstance = $recVer;
373 $recVerInstance |= $recInstance << 4;
374
375 $header = pack(
'vvV', $recVerInstance, $recType, $length);
376
377 $this->_data =
$header . $innerData;
378 $this->_spOffsets = $spOffsets;
379 $this->_spTypes = $spTypes;
380 break;
381
382 case 'PHPExcel_Shared_Escher_DgContainer_SpgrContainer_SpContainer':
383
385
386
387
388
389 if ($this->_object->getSpgr()) {
390 $recVer = 0x1;
391 $recInstance = 0x0000;
392 $recType = 0xF009;
393 $length = 0x00000010;
394
395 $recVerInstance = $recVer;
396 $recVerInstance |= $recInstance << 4;
397
398 $header = pack(
'vvV', $recVerInstance, $recType, $length);
399
401 }
402 $this->_spTypes[] = ($this->_object->getSpType());
403
404
405 $recVer = 0x2;
406 $recInstance = $this->_object->getSpType();
407 $recType = 0xF00A;
408 $length = 0x00000008;
409
410 $recVerInstance = $recVer;
411 $recVerInstance |= $recInstance << 4;
412
413 $header = pack(
'vvV', $recVerInstance, $recType, $length);
414
415 $data .=
$header . pack(
'VV', $this->_object->getSpId(), $this->_object->getSpgr() ? 0x0005 : 0x0A00);
416
417
418
419 if ($this->_object->getOPTCollection()) {
420 $optData = '';
421
422 $recVer = 0x3;
423 $recInstance = count($this->_object->getOPTCollection());
424 $recType = 0xF00B;
425 foreach ($this->_object->getOPTCollection() as $property => $value) {
426 $optData .= pack('vV', $property, $value);
427 }
428 $length = strlen($optData);
429
430 $recVerInstance = $recVer;
431 $recVerInstance |= $recInstance << 4;
432
433 $header = pack(
'vvV', $recVerInstance, $recType, $length);
435 }
436
437
438 if ($this->_object->getStartCoordinates()) {
439 $clientAnchorData = '';
440
441 $recVer = 0x0;
442 $recInstance = 0x0;
443 $recType = 0xF010;
444
445
449
450
451 $startOffsetX = $this->_object->getStartOffsetX();
452
453
454 $startOffsetY = $this->_object->getStartOffsetY();
455
456
460
461
462 $endOffsetX = $this->_object->getEndOffsetX();
463
464
465 $endOffsetY = $this->_object->getEndOffsetY();
466
467 $clientAnchorData = pack('vvvvvvvvv', $this->_object->getSpFlag(),
468 $c1, $startOffsetX, $r1, $startOffsetY,
469 $c2, $endOffsetX, $r2, $endOffsetY);
470
471 $length = strlen($clientAnchorData);
472
473 $recVerInstance = $recVer;
474 $recVerInstance |= $recInstance << 4;
475
476 $header = pack(
'vvV', $recVerInstance, $recType, $length);
478 }
479
480
481 if (!$this->_object->getSpgr()) {
482 $clientDataData = '';
483
484 $recVer = 0x0;
485 $recInstance = 0x0;
486 $recType = 0xF011;
487
488 $length = strlen($clientDataData);
489
490 $recVerInstance = $recVer;
491 $recVerInstance |= $recInstance << 4;
492
493 $header = pack(
'vvV', $recVerInstance, $recType, $length);
495 }
496
497
498 $recVer = 0xF;
499 $recInstance = 0x0000;
500 $recType = 0xF004;
501 $length = strlen(
$data);
502
503 $recVerInstance = $recVer;
504 $recVerInstance |= $recInstance << 4;
505
506 $header = pack(
'vvV', $recVerInstance, $recType, $length);
507
509 break;
510
511 }
512
514 }
static coordinateFromString($pCoordinateString='A1')
Coordinate from string.
static columnIndexFromString($pString='A')
Column index from string.
$_data
The written binary data.