Example #1
0
 /**
  * Generate chart tag in cell
  *
  * @param	PHPExcel_Worksheet	$pSheet			PHPExcel_Worksheet
  * @param	string				$coordinates	Cell coordinates
  * @return	string
  * @throws	PHPExcel_Writer_Exception
  */
 private function _writeChartInCell(PHPExcel_Worksheet $pSheet, $coordinates)
 {
     // Construct HTML
     $html = '';
     // Write charts
     foreach ($pSheet->getChartCollection() as $chart) {
         if ($chart instanceof PHPExcel_Chart) {
             $chartCoordinates = $chart->getTopLeftPosition();
             if ($chartCoordinates['cell'] == $coordinates) {
                 $chartFileName = PHPExcel_Shared_File::sys_get_temp_dir() . '/' . uniqid() . '.png';
                 if (!$chart->render($chartFileName)) {
                     return;
                 }
                 $html .= PHP_EOL;
                 $imageDetails = getimagesize($chartFileName);
                 if ($fp = fopen($chartFileName, "rb", 0)) {
                     $picture = fread($fp, filesize($chartFileName));
                     fclose($fp);
                     // base64 encode the binary data, then break it
                     // into chunks according to RFC 2045 semantics
                     $base64 = chunk_split(base64_encode($picture));
                     $imageData = 'data:' . $imageDetails['mime'] . ';base64,' . $base64;
                     $html .= '<div style="position: relative;">';
                     $html .= '<img style="position: absolute; z-index: 1; left: ' . $chartCoordinates['xOffset'] . 'px; top: ' . $chartCoordinates['yOffset'] . 'px; width: ' . $imageDetails[0] . 'px; height: ' . $imageDetails[1] . 'px;" src="' . $imageData . '" border="0" />' . PHP_EOL;
                     $html .= '</div>';
                     unlink($chartFileName);
                 }
             }
         }
     }
     // Return
     return $html;
 }
Example #2
0
 /**
  * Write worksheet relationships to XML format
  *
  * Numbering is as follows:
  * 	rId1 				- Drawings
  *  rId_hyperlink_x 	- Hyperlinks
  *
  * @param 	PHPExcel_Worksheet	$pWorksheet
  * @param 	int					$pWorksheetId
  * @param	boolean				$includeCharts	Flag indicating if we should write charts
  * @return 	string 				XML Output
  * @throws 	PHPExcel_Writer_Exception
  */
 public function writeWorksheetRelationships(PHPExcel_Worksheet $pWorksheet = null, $pWorksheetId = 1, $includeCharts = FALSE)
 {
     // Create XML writer
     $objWriter = null;
     if ($this->getParentWriter()->getUseDiskCaching()) {
         $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
     } else {
         $objWriter = new PHPExcel_Shared_XMLWriter(PHPExcel_Shared_XMLWriter::STORAGE_MEMORY);
     }
     // XML header
     $objWriter->startDocument('1.0', 'UTF-8', 'yes');
     // Relationships
     $objWriter->startElement('Relationships');
     $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
     // Write drawing relationships?
     $d = 0;
     if ($includeCharts) {
         $charts = $pWorksheet->getChartCollection();
     } else {
         $charts = array();
     }
     if ($pWorksheet->getDrawingCollection()->count() > 0 || count($charts) > 0) {
         $this->_writeRelationship($objWriter, ++$d, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', '../drawings/drawing' . $pWorksheetId . '.xml');
     }
     // Write chart relationships?
     //			$chartCount = 0;
     //			$charts = $pWorksheet->getChartCollection();
     //			echo 'Chart Rels: ' , count($charts) , '<br />';
     //			if (count($charts) > 0) {
     //				foreach($charts as $chart) {
     //					$this->_writeRelationship(
     //						$objWriter,
     //						++$d,
     //						'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart',
     //						'../charts/chart' . ++$chartCount . '.xml'
     //					);
     //				}
     //			}
     //
     // Write hyperlink relationships?
     $i = 1;
     foreach ($pWorksheet->getHyperlinkCollection() as $hyperlink) {
         if (!$hyperlink->isInternal()) {
             $this->_writeRelationship($objWriter, '_hyperlink_' . $i, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', $hyperlink->getUrl(), 'External');
             ++$i;
         }
     }
     // Write comments relationship?
     $i = 1;
     if (count($pWorksheet->getComments()) > 0) {
         $this->_writeRelationship($objWriter, '_comments_vml' . $i, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', '../drawings/vmlDrawing' . $pWorksheetId . '.vml');
         $this->_writeRelationship($objWriter, '_comments' . $i, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments', '../comments' . $pWorksheetId . '.xml');
     }
     // Write header/footer relationship?
     $i = 1;
     if (count($pWorksheet->getHeaderFooter()->getImages()) > 0) {
         $this->_writeRelationship($objWriter, '_headerfooter_vml' . $i, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing', '../drawings/vmlDrawingHF' . $pWorksheetId . '.vml');
     }
     $objWriter->endElement();
     // Return
     return $objWriter->getData();
 }
 /**
  * Write Drawings
  *
  * @param	PHPExcel_Shared_XMLWriter	$objWriter		XML Writer
  * @param	PHPExcel_Worksheet			$pSheet			Worksheet
  * @param	boolean						$includeCharts	Flag indicating if we should include drawing details for charts
  * @throws	PHPExcel_Writer_Exception
  */
 private function _writeDrawings(PHPExcel_Shared_XMLWriter $objWriter = null, PHPExcel_Worksheet $pSheet = null, $includeCharts = FALSE)
 {
     $chartCount = $includeCharts ? $pSheet->getChartCollection()->count() : 0;
     // If sheet contains drawings, add the relationships
     if ($pSheet->getDrawingCollection()->count() > 0 || $chartCount > 0) {
         $objWriter->startElement('drawing');
         $objWriter->writeAttribute('r:id', 'rId1');
         $objWriter->endElement();
     }
 }
Example #4
0
 private function _extendRowsForChartsAndImages(PHPExcel_Worksheet $pSheet, $row)
 {
     $rowMax = $row;
     $colMax = 'A';
     if ($this->_includeCharts) {
         foreach ($pSheet->getChartCollection() as $chart) {
             if ($chart instanceof PHPExcel_Chart) {
                 $chartCoordinates = $chart->getTopLeftPosition();
                 $chartTL = PHPExcel_Cell::coordinateFromString($chartCoordinates['cell']);
                 $chartCol = PHPExcel_Cell::columnIndexFromString($chartTL[0]);
                 if ($chartTL[1] > $rowMax) {
                     $rowMax = $chartTL[1];
                     if ($chartCol > PHPExcel_Cell::columnIndexFromString($colMax)) {
                         $colMax = $chartTL[0];
                     }
                 }
             }
         }
     }
     foreach ($pSheet->getDrawingCollection() as $drawing) {
         if ($drawing instanceof PHPExcel_Worksheet_Drawing) {
             $imageTL = PHPExcel_Cell::coordinateFromString($drawing->getCoordinates());
             $imageCol = PHPExcel_Cell::columnIndexFromString($imageTL[0]);
             if ($imageTL[1] > $rowMax) {
                 $rowMax = $imageTL[1];
                 if ($imageCol > PHPExcel_Cell::columnIndexFromString($colMax)) {
                     $colMax = $imageTL[0];
                 }
             }
         }
     }
     $html = '';
     $colMax++;
     while ($row < $rowMax) {
         $html .= '<tr>';
         for ($col = 'A'; $col != $colMax; ++$col) {
             $html .= '<td>';
             $html .= $this->_writeImageInCell($pSheet, $col . $row);
             if ($this->_includeCharts) {
                 $html .= $this->_writeChartInCell($pSheet, $col . $row);
             }
             $html .= '</td>';
         }
         ++$row;
         $html .= '</tr>';
     }
     return $html;
 }