ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
Drawing.php
Go to the documentation of this file.
1 <?php
37 {
47  public function writeDrawings(PHPExcel_Worksheet $pWorksheet = null, &$chartRef, $includeCharts = FALSE)
48  {
49  // Create XML writer
50  $objWriter = null;
51  if ($this->getParentWriter()->getUseDiskCaching()) {
53  } else {
55  }
56 
57  // XML header
58  $objWriter->startDocument('1.0','UTF-8','yes');
59 
60  // xdr:wsDr
61  $objWriter->startElement('xdr:wsDr');
62  $objWriter->writeAttribute('xmlns:xdr', 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing');
63  $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
64 
65  // Loop through images and write drawings
66  $i = 1;
67  $iterator = $pWorksheet->getDrawingCollection()->getIterator();
68  while ($iterator->valid()) {
69  $this->_writeDrawing($objWriter, $iterator->current(), $i);
70 
71  $iterator->next();
72  ++$i;
73  }
74 
75  if ($includeCharts) {
76  $chartCount = $pWorksheet->getChartCount();
77  // Loop through charts and write the chart position
78  if ($chartCount > 0) {
79  for ($c = 0; $c < $chartCount; ++$c) {
80  $this->_writeChart($objWriter, $pWorksheet->getChartByIndex($c), $c+$i);
81  }
82  }
83  }
84 
85 
86  $objWriter->endElement();
87 
88  // Return
89  return $objWriter->getData();
90  }
91 
100  public function _writeChart(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Chart $pChart = null, $pRelationId = -1)
101  {
102  $tl = $pChart->getTopLeftPosition();
103  $tl['colRow'] = PHPExcel_Cell::coordinateFromString($tl['cell']);
104  $br = $pChart->getBottomRightPosition();
105  $br['colRow'] = PHPExcel_Cell::coordinateFromString($br['cell']);
106 
107  $objWriter->startElement('xdr:twoCellAnchor');
108 
109  $objWriter->startElement('xdr:from');
110  $objWriter->writeElement('xdr:col', PHPExcel_Cell::columnIndexFromString($tl['colRow'][0]) - 1);
111  $objWriter->writeElement('xdr:colOff', PHPExcel_Shared_Drawing::pixelsToEMU($tl['xOffset']));
112  $objWriter->writeElement('xdr:row', $tl['colRow'][1] - 1);
113  $objWriter->writeElement('xdr:rowOff', PHPExcel_Shared_Drawing::pixelsToEMU($tl['yOffset']));
114  $objWriter->endElement();
115  $objWriter->startElement('xdr:to');
116  $objWriter->writeElement('xdr:col', PHPExcel_Cell::columnIndexFromString($br['colRow'][0]) - 1);
117  $objWriter->writeElement('xdr:colOff', PHPExcel_Shared_Drawing::pixelsToEMU($br['xOffset']));
118  $objWriter->writeElement('xdr:row', $br['colRow'][1] - 1);
119  $objWriter->writeElement('xdr:rowOff', PHPExcel_Shared_Drawing::pixelsToEMU($br['yOffset']));
120  $objWriter->endElement();
121 
122  $objWriter->startElement('xdr:graphicFrame');
123  $objWriter->writeAttribute('macro', '');
124  $objWriter->startElement('xdr:nvGraphicFramePr');
125  $objWriter->startElement('xdr:cNvPr');
126  $objWriter->writeAttribute('name', 'Chart '.$pRelationId);
127  $objWriter->writeAttribute('id', 1025 * $pRelationId);
128  $objWriter->endElement();
129  $objWriter->startElement('xdr:cNvGraphicFramePr');
130  $objWriter->startElement('a:graphicFrameLocks');
131  $objWriter->endElement();
132  $objWriter->endElement();
133  $objWriter->endElement();
134 
135  $objWriter->startElement('xdr:xfrm');
136  $objWriter->startElement('a:off');
137  $objWriter->writeAttribute('x', '0');
138  $objWriter->writeAttribute('y', '0');
139  $objWriter->endElement();
140  $objWriter->startElement('a:ext');
141  $objWriter->writeAttribute('cx', '0');
142  $objWriter->writeAttribute('cy', '0');
143  $objWriter->endElement();
144  $objWriter->endElement();
145 
146  $objWriter->startElement('a:graphic');
147  $objWriter->startElement('a:graphicData');
148  $objWriter->writeAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
149  $objWriter->startElement('c:chart');
150  $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart');
151  $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
152  $objWriter->writeAttribute('r:id', 'rId'.$pRelationId);
153  $objWriter->endElement();
154  $objWriter->endElement();
155  $objWriter->endElement();
156  $objWriter->endElement();
157 
158  $objWriter->startElement('xdr:clientData');
159  $objWriter->endElement();
160 
161  $objWriter->endElement();
162  }
163 
172  public function _writeDrawing(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet_BaseDrawing $pDrawing = null, $pRelationId = -1)
173  {
174  if ($pRelationId >= 0) {
175  // xdr:oneCellAnchor
176  $objWriter->startElement('xdr:oneCellAnchor');
177  // Image location
178  $aCoordinates = PHPExcel_Cell::coordinateFromString($pDrawing->getCoordinates());
179  $aCoordinates[0] = PHPExcel_Cell::columnIndexFromString($aCoordinates[0]);
180 
181  // xdr:from
182  $objWriter->startElement('xdr:from');
183  $objWriter->writeElement('xdr:col', $aCoordinates[0] - 1);
184  $objWriter->writeElement('xdr:colOff', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getOffsetX()));
185  $objWriter->writeElement('xdr:row', $aCoordinates[1] - 1);
186  $objWriter->writeElement('xdr:rowOff', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getOffsetY()));
187  $objWriter->endElement();
188 
189  // xdr:ext
190  $objWriter->startElement('xdr:ext');
191  $objWriter->writeAttribute('cx', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getWidth()));
192  $objWriter->writeAttribute('cy', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getHeight()));
193  $objWriter->endElement();
194 
195  // xdr:pic
196  $objWriter->startElement('xdr:pic');
197 
198  // xdr:nvPicPr
199  $objWriter->startElement('xdr:nvPicPr');
200 
201  // xdr:cNvPr
202  $objWriter->startElement('xdr:cNvPr');
203  $objWriter->writeAttribute('id', $pRelationId);
204  $objWriter->writeAttribute('name', $pDrawing->getName());
205  $objWriter->writeAttribute('descr', $pDrawing->getDescription());
206  $objWriter->endElement();
207 
208  // xdr:cNvPicPr
209  $objWriter->startElement('xdr:cNvPicPr');
210 
211  // a:picLocks
212  $objWriter->startElement('a:picLocks');
213  $objWriter->writeAttribute('noChangeAspect', '1');
214  $objWriter->endElement();
215 
216  $objWriter->endElement();
217 
218  $objWriter->endElement();
219 
220  // xdr:blipFill
221  $objWriter->startElement('xdr:blipFill');
222 
223  // a:blip
224  $objWriter->startElement('a:blip');
225  $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
226  $objWriter->writeAttribute('r:embed', 'rId' . $pRelationId);
227  $objWriter->endElement();
228 
229  // a:stretch
230  $objWriter->startElement('a:stretch');
231  $objWriter->writeElement('a:fillRect', null);
232  $objWriter->endElement();
233 
234  $objWriter->endElement();
235 
236  // xdr:spPr
237  $objWriter->startElement('xdr:spPr');
238 
239  // a:xfrm
240  $objWriter->startElement('a:xfrm');
241  $objWriter->writeAttribute('rot', PHPExcel_Shared_Drawing::degreesToAngle($pDrawing->getRotation()));
242  $objWriter->endElement();
243 
244  // a:prstGeom
245  $objWriter->startElement('a:prstGeom');
246  $objWriter->writeAttribute('prst', 'rect');
247 
248  // a:avLst
249  $objWriter->writeElement('a:avLst', null);
250 
251  $objWriter->endElement();
252 
253 // // a:solidFill
254 // $objWriter->startElement('a:solidFill');
255 
256 // // a:srgbClr
257 // $objWriter->startElement('a:srgbClr');
258 // $objWriter->writeAttribute('val', 'FFFFFF');
259 
261 // // a:shade
262 // $objWriter->startElement('a:shade');
263 // $objWriter->writeAttribute('val', '85000');
264 // $objWriter->endElement();
265 //*/
266 
267 // $objWriter->endElement();
268 
269 // $objWriter->endElement();
270 /*
271  // a:ln
272  $objWriter->startElement('a:ln');
273  $objWriter->writeAttribute('w', '88900');
274  $objWriter->writeAttribute('cap', 'sq');
275 
276  // a:solidFill
277  $objWriter->startElement('a:solidFill');
278 
279  // a:srgbClr
280  $objWriter->startElement('a:srgbClr');
281  $objWriter->writeAttribute('val', 'FFFFFF');
282  $objWriter->endElement();
283 
284  $objWriter->endElement();
285 
286  // a:miter
287  $objWriter->startElement('a:miter');
288  $objWriter->writeAttribute('lim', '800000');
289  $objWriter->endElement();
290 
291  $objWriter->endElement();
292 */
293 
294  if ($pDrawing->getShadow()->getVisible()) {
295  // a:effectLst
296  $objWriter->startElement('a:effectLst');
297 
298  // a:outerShdw
299  $objWriter->startElement('a:outerShdw');
300  $objWriter->writeAttribute('blurRad', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getShadow()->getBlurRadius()));
301  $objWriter->writeAttribute('dist', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getShadow()->getDistance()));
302  $objWriter->writeAttribute('dir', PHPExcel_Shared_Drawing::degreesToAngle($pDrawing->getShadow()->getDirection()));
303  $objWriter->writeAttribute('algn', $pDrawing->getShadow()->getAlignment());
304  $objWriter->writeAttribute('rotWithShape', '0');
305 
306  // a:srgbClr
307  $objWriter->startElement('a:srgbClr');
308  $objWriter->writeAttribute('val', $pDrawing->getShadow()->getColor()->getRGB());
309 
310  // a:alpha
311  $objWriter->startElement('a:alpha');
312  $objWriter->writeAttribute('val', $pDrawing->getShadow()->getAlpha() * 1000);
313  $objWriter->endElement();
314 
315  $objWriter->endElement();
316 
317  $objWriter->endElement();
318 
319  $objWriter->endElement();
320  }
321 /*
322 
323  // a:scene3d
324  $objWriter->startElement('a:scene3d');
325 
326  // a:camera
327  $objWriter->startElement('a:camera');
328  $objWriter->writeAttribute('prst', 'orthographicFront');
329  $objWriter->endElement();
330 
331  // a:lightRig
332  $objWriter->startElement('a:lightRig');
333  $objWriter->writeAttribute('rig', 'twoPt');
334  $objWriter->writeAttribute('dir', 't');
335 
336  // a:rot
337  $objWriter->startElement('a:rot');
338  $objWriter->writeAttribute('lat', '0');
339  $objWriter->writeAttribute('lon', '0');
340  $objWriter->writeAttribute('rev', '0');
341  $objWriter->endElement();
342 
343  $objWriter->endElement();
344 
345  $objWriter->endElement();
346 */
347 /*
348  // a:sp3d
349  $objWriter->startElement('a:sp3d');
350 
351  // a:bevelT
352  $objWriter->startElement('a:bevelT');
353  $objWriter->writeAttribute('w', '25400');
354  $objWriter->writeAttribute('h', '19050');
355  $objWriter->endElement();
356 
357  // a:contourClr
358  $objWriter->startElement('a:contourClr');
359 
360  // a:srgbClr
361  $objWriter->startElement('a:srgbClr');
362  $objWriter->writeAttribute('val', 'FFFFFF');
363  $objWriter->endElement();
364 
365  $objWriter->endElement();
366 
367  $objWriter->endElement();
368 */
369  $objWriter->endElement();
370 
371  $objWriter->endElement();
372 
373  // xdr:clientData
374  $objWriter->writeElement('xdr:clientData', null);
375 
376  $objWriter->endElement();
377  } else {
378  throw new PHPExcel_Writer_Exception("Invalid parameters passed.");
379  }
380  }
381 
389  public function writeVMLHeaderFooterImages(PHPExcel_Worksheet $pWorksheet = null)
390  {
391  // Create XML writer
392  $objWriter = null;
393  if ($this->getParentWriter()->getUseDiskCaching()) {
395  } else {
397  }
398 
399  // XML header
400  $objWriter->startDocument('1.0','UTF-8','yes');
401 
402  // Header/footer images
403  $images = $pWorksheet->getHeaderFooter()->getImages();
404 
405  // xml
406  $objWriter->startElement('xml');
407  $objWriter->writeAttribute('xmlns:v', 'urn:schemas-microsoft-com:vml');
408  $objWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office');
409  $objWriter->writeAttribute('xmlns:x', 'urn:schemas-microsoft-com:office:excel');
410 
411  // o:shapelayout
412  $objWriter->startElement('o:shapelayout');
413  $objWriter->writeAttribute('v:ext', 'edit');
414 
415  // o:idmap
416  $objWriter->startElement('o:idmap');
417  $objWriter->writeAttribute('v:ext', 'edit');
418  $objWriter->writeAttribute('data', '1');
419  $objWriter->endElement();
420 
421  $objWriter->endElement();
422 
423  // v:shapetype
424  $objWriter->startElement('v:shapetype');
425  $objWriter->writeAttribute('id', '_x0000_t75');
426  $objWriter->writeAttribute('coordsize', '21600,21600');
427  $objWriter->writeAttribute('o:spt', '75');
428  $objWriter->writeAttribute('o:preferrelative', 't');
429  $objWriter->writeAttribute('path', 'm@4@5l@4@11@9@11@9@5xe');
430  $objWriter->writeAttribute('filled', 'f');
431  $objWriter->writeAttribute('stroked', 'f');
432 
433  // v:stroke
434  $objWriter->startElement('v:stroke');
435  $objWriter->writeAttribute('joinstyle', 'miter');
436  $objWriter->endElement();
437 
438  // v:formulas
439  $objWriter->startElement('v:formulas');
440 
441  // v:f
442  $objWriter->startElement('v:f');
443  $objWriter->writeAttribute('eqn', 'if lineDrawn pixelLineWidth 0');
444  $objWriter->endElement();
445 
446  // v:f
447  $objWriter->startElement('v:f');
448  $objWriter->writeAttribute('eqn', 'sum @0 1 0');
449  $objWriter->endElement();
450 
451  // v:f
452  $objWriter->startElement('v:f');
453  $objWriter->writeAttribute('eqn', 'sum 0 0 @1');
454  $objWriter->endElement();
455 
456  // v:f
457  $objWriter->startElement('v:f');
458  $objWriter->writeAttribute('eqn', 'prod @2 1 2');
459  $objWriter->endElement();
460 
461  // v:f
462  $objWriter->startElement('v:f');
463  $objWriter->writeAttribute('eqn', 'prod @3 21600 pixelWidth');
464  $objWriter->endElement();
465 
466  // v:f
467  $objWriter->startElement('v:f');
468  $objWriter->writeAttribute('eqn', 'prod @3 21600 pixelHeight');
469  $objWriter->endElement();
470 
471  // v:f
472  $objWriter->startElement('v:f');
473  $objWriter->writeAttribute('eqn', 'sum @0 0 1');
474  $objWriter->endElement();
475 
476  // v:f
477  $objWriter->startElement('v:f');
478  $objWriter->writeAttribute('eqn', 'prod @6 1 2');
479  $objWriter->endElement();
480 
481  // v:f
482  $objWriter->startElement('v:f');
483  $objWriter->writeAttribute('eqn', 'prod @7 21600 pixelWidth');
484  $objWriter->endElement();
485 
486  // v:f
487  $objWriter->startElement('v:f');
488  $objWriter->writeAttribute('eqn', 'sum @8 21600 0');
489  $objWriter->endElement();
490 
491  // v:f
492  $objWriter->startElement('v:f');
493  $objWriter->writeAttribute('eqn', 'prod @7 21600 pixelHeight');
494  $objWriter->endElement();
495 
496  // v:f
497  $objWriter->startElement('v:f');
498  $objWriter->writeAttribute('eqn', 'sum @10 21600 0');
499  $objWriter->endElement();
500 
501  $objWriter->endElement();
502 
503  // v:path
504  $objWriter->startElement('v:path');
505  $objWriter->writeAttribute('o:extrusionok', 'f');
506  $objWriter->writeAttribute('gradientshapeok', 't');
507  $objWriter->writeAttribute('o:connecttype', 'rect');
508  $objWriter->endElement();
509 
510  // o:lock
511  $objWriter->startElement('o:lock');
512  $objWriter->writeAttribute('v:ext', 'edit');
513  $objWriter->writeAttribute('aspectratio', 't');
514  $objWriter->endElement();
515 
516  $objWriter->endElement();
517 
518  // Loop through images
519  foreach ($images as $key => $value) {
520  $this->_writeVMLHeaderFooterImage($objWriter, $key, $value);
521  }
522 
523  $objWriter->endElement();
524 
525  // Return
526  return $objWriter->getData();
527  }
528 
538  {
539  // Calculate object id
540  preg_match('{(\d+)}', md5($pReference), $m);
541  $id = 1500 + (substr($m[1], 0, 2) * 1);
542 
543  // Calculate offset
544  $width = $pImage->getWidth();
545  $height = $pImage->getHeight();
546  $marginLeft = $pImage->getOffsetX();
547  $marginTop = $pImage->getOffsetY();
548 
549  // v:shape
550  $objWriter->startElement('v:shape');
551  $objWriter->writeAttribute('id', $pReference);
552  $objWriter->writeAttribute('o:spid', '_x0000_s' . $id);
553  $objWriter->writeAttribute('type', '#_x0000_t75');
554  $objWriter->writeAttribute('style', "position:absolute;margin-left:{$marginLeft}px;margin-top:{$marginTop}px;width:{$width}px;height:{$height}px;z-index:1");
555 
556  // v:imagedata
557  $objWriter->startElement('v:imagedata');
558  $objWriter->writeAttribute('o:relid', 'rId' . $pReference);
559  $objWriter->writeAttribute('o:title', $pImage->getName());
560  $objWriter->endElement();
561 
562  // o:lock
563  $objWriter->startElement('o:lock');
564  $objWriter->writeAttribute('v:ext', 'edit');
565  $objWriter->writeAttribute('rotation', 't');
566  $objWriter->endElement();
567 
568  $objWriter->endElement();
569  }
570 
571 
579  public function allDrawings(PHPExcel $pPHPExcel = null)
580  {
581  // Get an array of all drawings
582  $aDrawings = array();
583 
584  // Loop through PHPExcel
585  $sheetCount = $pPHPExcel->getSheetCount();
586  for ($i = 0; $i < $sheetCount; ++$i) {
587  // Loop through images and add to array
588  $iterator = $pPHPExcel->getSheet($i)->getDrawingCollection()->getIterator();
589  while ($iterator->valid()) {
590  $aDrawings[] = $iterator->current();
591 
592  $iterator->next();
593  }
594  }
595 
596  return $aDrawings;
597  }
598 }
allDrawings(PHPExcel $pPHPExcel=null)
Get an array of all drawings.
Definition: Drawing.php:579
writeVMLHeaderFooterImages(PHPExcel_Worksheet $pWorksheet=null)
Write VML header/footer images to XML format.
Definition: Drawing.php:389
static coordinateFromString($pCoordinateString='A1')
Coordinate from string.
Definition: Cell.php:580
_writeDrawing(PHPExcel_Shared_XMLWriter $objWriter=null, PHPExcel_Worksheet_BaseDrawing $pDrawing=null, $pRelationId=-1)
Write drawings to XML format.
Definition: Drawing.php:172
static pixelsToEMU($pValue=0)
Convert pixels to EMU.
Definition: Drawing.php:44
if(!array_key_exists('StateId', $_REQUEST)) $id
getParentWriter()
Get parent IWriter object.
Definition: WriterPart.php:61
writeDrawings(PHPExcel_Worksheet $pWorksheet=null, &$chartRef, $includeCharts=FALSE)
Write drawings to XML format.
Definition: Drawing.php:47
$objWriter
static degreesToAngle($pValue=0)
Convert degrees to angle.
Definition: Drawing.php:154
Create styles array
The data for the language used.
static columnIndexFromString($pString='A')
Column index from string.
Definition: Cell.php:782
_writeChart(PHPExcel_Shared_XMLWriter $objWriter=null, PHPExcel_Chart $pChart=null, $pRelationId=-1)
Write drawings to XML format.
Definition: Drawing.php:100
$i
Definition: disco.tpl.php:19
_writeVMLHeaderFooterImage(PHPExcel_Shared_XMLWriter $objWriter=null, $pReference='', PHPExcel_Worksheet_HeaderFooterDrawing $pImage=null)
Write VML comment to XML format.
Definition: Drawing.php:537
const STORAGE_MEMORY
Temporary storage method.
Definition: XMLWriter.php:46
$key
Definition: croninfo.php:18