Как читать .docx файл на php

Для чтения .docx файла на php я использую библиотеку PHPOffice/PHPWord. Я написал такую функция для чтения .docx файла:

function read_docx($path_to_file) {
    $source = $path_to_file;
 
    $objReader = \PhpOffice\PhpWord\IOFactory::createReader('Word2007');
    
    $phpWord = $objReader->load($source);
    
    $body = '';
    foreach($phpWord->getSections() as $section) {
        $arrays = $section->getElements();
        
        foreach($arrays as $e) {
            // echo get_class($e) . "<br>";
            if(get_class($e) === 'PhpOffice\PhpWord\Element\TextRun') {
                foreach($e->getElements() as $text) {
                    // echo $text->getText() . "<br>";
                    
                    $font = $text->getFontStyle();
                    
                    $size = $font->getSize()/10;
                    $bold = $font->isBold() ? 'font-weight:700;' :'';
                    $color = $font->getColor();
                    $fontFamily = $font->getName();
                    
                    $body .= '<span style="font-size:' . $size . 'em;font-family:' . $fontFamily . '; '.$bold.'; color:#'.$color.'">';
                    $body .= $text->getText().'</span>';
                }
            }
            
            else if(get_class($e) === 'PhpOffice\PhpWord\Element\TextBreak') {
                $body .= '<br />';
            }
            
            else if(get_class($e) === 'PhpOffice\PhpWord\Element\Table') {
                $body .= '<table border="2px">';
                
                $rows = $e->getRows();
                
                foreach($rows as $row) {
                    $body .= '<tr>';
                    
                    $cells = $row->getCells();
                    foreach($cells as $cell) {
                        $body .= '<td style="width:'.$cell->getWidth().'">';
                        $celements = $cell->getElements();
                        foreach($celements as $celem) {
                            if(get_class($celem) === 'PhpOffice\PhpWord\Element\Text') {
                                $body .= $celem->getText();
                            }
                            
                            else if(get_class($celem) === 'PhpOffice\PhpWord\Element\TextRun') {
                                foreach($celem->getElements() as $text) {
                                    $body .= $text->getText();
                                }
                            }
                        }   
                        $body .= '</td>';
                    }
                    
                    $body .= '</tr>';
                }
                
                $body .= '</table>';
            }
            else {
                $body .= $e->getText();
            }
        }
        
        // break;
    }
    
    return $body;

В этой функции видно, что когда встречается знак абзаца в .docx файле, функция ставит тег <br> . Но этот тег она ставит только если есть 2 знака абзаца, т.е. библиотека PHPOffice/PHPWord почему то не распознает 1 знак абзаца. Мне нужно, чтобы, когда в файле .docx встречается знак абзаца, ставить тег <br>. Как мне этого добиться?


Ответы (0 шт):