Quantcast
Channel: PHPWord
Viewing all articles
Browse latest Browse all 450

New Post: PHPWord version capable of embedding docx. pptx and xlsx files into Word files

$
0
0
Part 2 of document.php in PHPWord/Writer/Word2007 directory:
private function _writeListItem(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_ListItem $listItem) {
    $textObject = $listItem->getTextObject();
    $text = $textObject->getText();
    $styleParagraph = $textObject->getParagraphStyle();
    $SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;

    $depth = $listItem->getDepth();
    $listType = $listItem->getStyle()->getListType();

    $objWriter->startElement('w:p');
        $objWriter->startElement('w:pPr');

            if($SpIsObject) {
                $this->_writeParagraphStyle($objWriter, $styleParagraph, true);
            } elseif(!$SpIsObject && !is_null($styleParagraph)) {
                $objWriter->startElement('w:pStyle');
                    $objWriter->writeAttribute('w:val', $styleParagraph);
                $objWriter->endElement();
            }

            $objWriter->startElement('w:numPr');

                $objWriter->startElement('w:ilvl');
                    $objWriter->writeAttribute('w:val', $depth);
                $objWriter->endElement();

                $objWriter->startElement('w:numId');
                    $objWriter->writeAttribute('w:val', $listType);
                $objWriter->endElement();

            $objWriter->endElement();
        $objWriter->endElement();

        $this->_writeText($objWriter, $textObject, true);

    $objWriter->endElement();
}

protected function _writeObject(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Object $object) {
    $rIdObject = $object->getRelationId();
    $rIdImage = $object->getImageRelationId();
    $shapeId = md5($rIdObject.'_'.$rIdImage);

    $objectId = $object->getObjectId();

    $style = $object->getStyle();
    $width = $style->getWidth();
    $height = $style->getHeight();
    $align = $style->getAlign();

    $progid = array ('xls' => 'Excel.Sheet.8', 'xlsx' => 'Excel.Sheet.12', 'doc' => 'Word.Document.8', 'docx' => 'Word.Document.12', 'ppt' => 'PowerPoint.Show.8', 'pptx' => 'PowerPoint.Show.12');
    $src = $object->getSource();
    $inf = pathinfo($src);
    $ext = strtolower($inf['extension']); 

    $objWriter->startElement('w:p');

        if(!is_null($align)) {
            $objWriter->startElement('w:pPr');
                $objWriter->startElement('w:jc');
                    $objWriter->writeAttribute('w:val', $align);
                $objWriter->endElement();
            $objWriter->endElement();
        }

        $objWriter->startElement('w:r');

            $objWriter->startElement('w:object');
            $objWriter->writeAttribute('w:dxaOrig', '249');
            $objWriter->writeAttribute('w:dyaOrig', '160');

                $objWriter->startElement('v:shape');
                $objWriter->writeAttribute('id', $shapeId);
                $objWriter->writeAttribute('type', '#_x0000_t75');
                $objWriter->writeAttribute('style', 'width:104px;height:67px');
                $objWriter->writeAttribute('o:ole', '');

                    $objWriter->startElement('v:imagedata');
                    $objWriter->writeAttribute('r:id', 'rId'.$rIdImage);
                    $objWriter->writeAttribute('o:title', '');
                    $objWriter->endElement();

                $objWriter->endElement();

                $objWriter->startElement('o:OLEObject');
                $objWriter->writeAttribute('Type', 'Embed');
                // $objWriter->writeAttribute('ProgID', 'Package');
                $objWriter->writeAttribute('ProgID', $progid[$ext]);
                $objWriter->writeAttribute('ShapeID', $shapeId);
                $objWriter->writeAttribute('DrawAspect', 'Icon');
                $objWriter->writeAttribute('ObjectID', '_'.$objectId);
                $objWriter->writeAttribute('r:id', 'rId'.$rIdObject);
                $objWriter->endElement();

            $objWriter->endElement();

        $objWriter->endElement(); // w:r

    $objWriter->endElement(); // w:p
}

private function _writeTOC(PHPWord_Shared_XMLWriter $objWriter = null) {
    $titles = PHPWord_TOC::getTitles();
    $styleFont = PHPWord_TOC::getStyleFont();

    $styleTOC = PHPWord_TOC::getStyleTOC();
    $fIndent = $styleTOC->getIndent();
    $tabLeader = $styleTOC->getTabLeader();
    $tabPos = $styleTOC->getTabPos();

    $isObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;

    for($i=0; $i<count($titles); $i++) {
        $title = $titles[$i];
        $indent = ($title['depth'] - 1) * $fIndent;

        $objWriter->startElement('w:p');

            $objWriter->startElement('w:pPr');

                if($isObject && !is_null($styleFont->getParagraphStyle())) {
                    $this->_writeParagraphStyle($objWriter, $styleFont->getParagraphStyle());
                }

                if($indent > 0) {
                    $objWriter->startElement('w:ind');
                        $objWriter->writeAttribute('w:left', $indent);
                    $objWriter->endElement();
                }

                if(!empty($styleFont) && !$isObject) {
                    $objWriter->startElement('w:pPr');
                        $objWriter->startElement('w:pStyle');
                            $objWriter->writeAttribute('w:val', $styleFont);
                        $objWriter->endElement();
                    $objWriter->endElement();
                }

                $objWriter->startElement('w:tabs');
                    $objWriter->startElement('w:tab');
                        $objWriter->writeAttribute('w:val', 'right');
                        if(!empty($tabLeader)) {
                            $objWriter->writeAttribute('w:leader', $tabLeader);
                        }
                        $objWriter->writeAttribute('w:pos', $tabPos);
                    $objWriter->endElement();
                $objWriter->endElement();

            $objWriter->endElement(); // w:pPr


            if($i == 0) {
                $objWriter->startElement('w:r');
                    $objWriter->startElement('w:fldChar');
                        $objWriter->writeAttribute('w:fldCharType', 'begin');
                    $objWriter->endElement();
                $objWriter->endElement();

                $objWriter->startElement('w:r');
                    $objWriter->startElement('w:instrText');
                        $objWriter->writeAttribute('xml:space', 'preserve');
                        $objWriter->writeRaw('TOC \o "1-9" \h \z \u');
                    $objWriter->endElement();
                $objWriter->endElement();

                $objWriter->startElement('w:r');
                    $objWriter->startElement('w:fldChar');
                        $objWriter->writeAttribute('w:fldCharType', 'separate');
                    $objWriter->endElement();
                $objWriter->endElement();
            }

            $objWriter->startElement('w:hyperlink');
                $objWriter->writeAttribute('w:anchor', $title['anchor']);
                $objWriter->writeAttribute('w:history', '1');

                $objWriter->startElement('w:r');

                    if($isObject) {
                        $this->_writeTextStyle($objWriter, $styleFont);
                    }

                    $objWriter->startElement('w:t');
                        $objWriter->writeRaw($title['text']);
                    $objWriter->endElement();
                $objWriter->endElement();

                $objWriter->startElement('w:r');
                    $objWriter->writeElement('w:tab', null);
                $objWriter->endElement();

                $objWriter->startElement('w:r');
                    $objWriter->startElement('w:fldChar');
                        $objWriter->writeAttribute('w:fldCharType', 'begin');
                    $objWriter->endElement();
                $objWriter->endElement();

                $objWriter->startElement('w:r');
                    $objWriter->startElement('w:instrText');
                        $objWriter->writeAttribute('xml:space', 'preserve');
                        $objWriter->writeRaw('PAGEREF '.$title['anchor'].' \h');
                    $objWriter->endElement();
                $objWriter->endElement();

                $objWriter->startElement('w:r');
                    $objWriter->startElement('w:fldChar');
                        $objWriter->writeAttribute('w:fldCharType', 'end');
                    $objWriter->endElement();
                $objWriter->endElement();

            $objWriter->endElement(); // w:hyperlink

        $objWriter->endElement(); // w:p
    }

    $objWriter->startElement('w:p');
        $objWriter->startElement('w:r');
            $objWriter->startElement('w:fldChar');
                $objWriter->writeAttribute('w:fldCharType', 'end');
            $objWriter->endElement();
        $objWriter->endElement();
    $objWriter->endElement();
}
}

Viewing all articles
Browse latest Browse all 450

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>