Esempio n. 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::sysGetTempDir() . '/' . 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;
 }
Esempio n. 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 $objWriter->getData();
 }
Esempio n. 3
0
 /**
  * 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();
     }
 }