private function PHPExcel_Writer_Excel5::_buildWorkbookEscher in Loft Data Grids 6.2
Same name and namespace in other branches
- 7.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel5.php \PHPExcel_Writer_Excel5::_buildWorkbookEscher()
* Build the Escher object corresponding to the MSODRAWINGGROUP record
1 call to PHPExcel_Writer_Excel5::_buildWorkbookEscher()
- PHPExcel_Writer_Excel5::save in vendor/
phpoffice/ phpexcel/ Classes/ PHPExcel/ Writer/ Excel5.php - * Save PHPExcel to file * *
File
- vendor/
phpoffice/ phpexcel/ Classes/ PHPExcel/ Writer/ Excel5.php, line 412
Class
- PHPExcel_Writer_Excel5
- PHPExcel_Writer_Excel5
Code
private function _buildWorkbookEscher() {
$escher = null;
// any drawings in this workbook?
$found = false;
foreach ($this->_phpExcel
->getAllSheets() as $sheet) {
if (count($sheet
->getDrawingCollection()) > 0) {
$found = true;
break;
}
}
// nothing to do if there are no drawings
if (!$found) {
return;
}
// if we reach here, then there are drawings in the workbook
$escher = new PHPExcel_Shared_Escher();
// dggContainer
$dggContainer = new PHPExcel_Shared_Escher_DggContainer();
$escher
->setDggContainer($dggContainer);
// set IDCLs (identifier clusters)
$dggContainer
->setIDCLs($this->_IDCLs);
// this loop is for determining maximum shape identifier of all drawing
$spIdMax = 0;
$totalCountShapes = 0;
$countDrawings = 0;
foreach ($this->_phpExcel
->getAllsheets() as $sheet) {
$sheetCountShapes = 0;
// count number of shapes (minus group shape), in sheet
if (count($sheet
->getDrawingCollection()) > 0) {
++$countDrawings;
foreach ($sheet
->getDrawingCollection() as $drawing) {
++$sheetCountShapes;
++$totalCountShapes;
$spId = $sheetCountShapes | $this->_phpExcel
->getIndex($sheet) + 1 << 10;
$spIdMax = max($spId, $spIdMax);
}
}
}
$dggContainer
->setSpIdMax($spIdMax + 1);
$dggContainer
->setCDgSaved($countDrawings);
$dggContainer
->setCSpSaved($totalCountShapes + $countDrawings);
// total number of shapes incl. one group shapes per drawing
// bstoreContainer
$bstoreContainer = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer();
$dggContainer
->setBstoreContainer($bstoreContainer);
// the BSE's (all the images)
foreach ($this->_phpExcel
->getAllsheets() as $sheet) {
foreach ($sheet
->getDrawingCollection() as $drawing) {
if ($drawing instanceof PHPExcel_Worksheet_Drawing) {
$filename = $drawing
->getPath();
list($imagesx, $imagesy, $imageFormat) = getimagesize($filename);
switch ($imageFormat) {
case 1:
// GIF, not supported by BIFF8, we convert to PNG
$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
ob_start();
imagepng(imagecreatefromgif($filename));
$blipData = ob_get_contents();
ob_end_clean();
break;
case 2:
// JPEG
$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG;
$blipData = file_get_contents($filename);
break;
case 3:
// PNG
$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
$blipData = file_get_contents($filename);
break;
case 6:
// Windows DIB (BMP), we convert to PNG
$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
ob_start();
imagepng(PHPExcel_Shared_Drawing::imagecreatefrombmp($filename));
$blipData = ob_get_contents();
ob_end_clean();
break;
default:
continue 2;
}
$blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
$blip
->setData($blipData);
$BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE();
$BSE
->setBlipType($blipType);
$BSE
->setBlip($blip);
$bstoreContainer
->addBSE($BSE);
}
else {
if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
switch ($drawing
->getRenderingFunction()) {
case PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG:
$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_JPEG;
$renderingFunction = 'imagejpeg';
break;
case PHPExcel_Worksheet_MemoryDrawing::RENDERING_GIF:
case PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG:
case PHPExcel_Worksheet_MemoryDrawing::RENDERING_DEFAULT:
$blipType = PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE::BLIPTYPE_PNG;
$renderingFunction = 'imagepng';
break;
}
ob_start();
call_user_func($renderingFunction, $drawing
->getImageResource());
$blipData = ob_get_contents();
ob_end_clean();
$blip = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE_Blip();
$blip
->setData($blipData);
$BSE = new PHPExcel_Shared_Escher_DggContainer_BstoreContainer_BSE();
$BSE
->setBlipType($blipType);
$BSE
->setBlip($blip);
$bstoreContainer
->addBSE($BSE);
}
}
}
}
// Set the Escher object
$this->_writerWorkbook
->setEscher($escher);
}