/** * Writes the MSODRAWINGGROUP record if needed. Possibly split using CONTINUE records. */ private function writeMsoDrawingGroup() { // write the Escher stream if necessary if (isset($this->escher)) { $writer = new \PHPExcel\Writer\Excel5\Escher($this->escher); $data = $writer->close(); $record = 0xeb; $length = strlen($data); $header = pack("vv", $record, $length); return $this->writeData($header . $data); } else { return ''; } }
/** * Write MSODRAWING record */ private function writeMsoDrawing() { // write the Escher stream if necessary if (isset($this->escher)) { $writer = new \PHPExcel\Writer\Excel5\Escher($this->escher); $data = $writer->close(); $spOffsets = $writer->getSpOffsets(); $spTypes = $writer->getSpTypes(); // write the neccesary MSODRAWING, OBJ records // split the Escher stream $spOffsets[0] = 0; $nm = count($spOffsets) - 1; // number of shapes excluding first shape for ($i = 1; $i <= $nm; ++$i) { // MSODRAWING record $record = 0xec; // Record identifier // chunk of Escher stream for one shape $dataChunk = substr($data, $spOffsets[$i - 1], $spOffsets[$i] - $spOffsets[$i - 1]); $length = strlen($dataChunk); $header = pack("vv", $record, $length); $this->append($header . $dataChunk); // OBJ record $record = 0x5d; // record identifier $objData = ''; // ftCmo if ($spTypes[$i] == 0xc9) { // Add ftCmo (common object data) subobject $objData .= pack('vvvvvVVV', 0x15, 0x12, 0x14, $i, 0x2101, 0, 0, 0); // Add ftSbs Scroll bar subobject $objData .= pack('vv', 0xc, 0x14); $objData .= pack('H*', '0000000000000000640001000A00000010000100'); // Add ftLbsData (List box data) subobject $objData .= pack('vv', 0x13, 0x1fee); $objData .= pack('H*', '00000000010001030000020008005700'); } else { // Add ftCmo (common object data) subobject $objData .= pack('vvvvvVVV', 0x15, 0x12, 0x8, $i, 0x6011, 0, 0, 0); } // ftEnd $objData .= pack('vv', 0x0, 0x0); $length = strlen($objData); $header = pack('vv', $record, $length); $this->append($header . $objData); } } }