@animr

Как парсить docx файл у которого есть разрывы между страницами?

Проблема следующая, выдает ошибку при парсинге docx файла, где есть разрывы между страницами:
Fatal error: Uncaught Error: Call to undefined method PhpOffice\PhpWord\Element\TextBreak::getText() in D:\OSPanel\domains\ ...


вот код:
$file = ROOT . '\upload\doc\iz1.docx';
        $objReaderWordX = \PhpOffice\PhpWord\IOFactory::createReader('Word2007');
        $phpWord = $objReaderWordX->load( $file );
        foreach ( $phpWord->getSections() as $section ) {
            $arr = $section->getElements();
            foreach ( $arr as $valuEx ) {
                if ( get_class( $valuEx ) == 'PhpOffice\PhpWord\Element\TextRun' ) {
                    foreach ( $valuEx->getElements() as $textEx ) {
                        print_r( $textEx->getText() );
                    }
                } else if ( get_class( $valuEx ) === 'PhpOffice\PhpWord\Element\PageBreak' ) {
                    echo '============= 2 Разрыв страницы =========================';  
                } else if ( get_class( $valuEx ) === 'PhpOffice\PhpWord\Element\TextBreak' ) {
                    echo '<br>';
                } else if ( get_class( $valuEx ) === 'PhpOffice\PhpWord\Element\Table' ) {
                    echo '<table border="2px">';
                    $rows = $valuEx->getRows();
                    foreach ( $rows as $row ) {
                        echo '<tr>';
                        $cells = $row->getCells();
                        foreach ( $cells as $cell ) {
                            echo '<td style="width:'. $cell->getWidth() .'; height:20p">';
                            $cElements = $cell->getElements();
                            foreach ( $cElements as $cElem ) {
                                if ( get_class( $cElem ) === 'PhpOffice\PhpWord\Element\Text' ) {
                                    print_r( $cElem->getText() );
                                } else if ( get_class( $cElem ) === 'PhpOffice\PhpWord\Element\TextRun' ) {
                                    foreach ( $cElem->getElements() as $cElemText ) {
                                        print_r( $cElemText->getText() );
                                    }
                                }
                            }
                            echo '</td>';
                        }
                        echo '</tr>';
                    }
                    echo '</table>';
                } 
            }
       }
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
sHinE
@sHinE
веб-разработчик, php/js/mysql и сопутствующее
Судя по всему у вас при переборе foreach где-то встречается элемент с классом PhpOffice\PhpWord\Element\TextBreak у которого нет метода getText().
Я бы добавил проверку на то, не является ли текущий элемент эксземпляром PhpOffice\PhpWord\Element\TextBreak. Если является - то переходил бы к следующему.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 22:11
2000 руб./за проект
24 апр. 2024, в 22:00
500 руб./в час
24 апр. 2024, в 21:49
10000 руб./за проект