You are here

private function PHPExcel_Writer_Excel5::_buildWorkbookEscher in Loft Data Grids 7.2

Same name and namespace in other branches
  1. 6.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);
}