Формирование файла .docx на основании данных инфоблока | REDs Group
REDS Group
ул. Большая Академическая, дом 5, стр. 1, Москва.

Формирование файла .docx на основании данных инфоблока

70
Для генерации .DOCX файлов в PHP используются различные библиотеки: PHPWord, PHPDocx, PHPStamp.

В данной статье для создания документа .docx на основании шаблона будем использовать библиотеку PHPWord.

  1. Скачать библиотеку: https://github.com/PHPOffice/PHPWord.
  2. Поместить папку \src\PhpWord в нужный раздел, в котором будет использоваться библиотека.
  3. Переместить файл PHPWord.php из папки \PhpWord в раздел, в котором будет использоваться библиотека.
  4. В файле \PHPWord\Template.php закомментировать следующие строчки для возможности использовать автозамену:
    public function setValue($search, $replace) {
        if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {
            $search = '${'.$search.'}';
        }
            
        if(!is_array($replace)) {
            $replace = utf8_encode($replace);
        }
            
        $this->_documentXML = str_replace($search, $replace, $this->_documentXML);
    }
    
  5. Добавить в файл следующие строки:
    public function setValue($search, $replace) {
        if(substr($search, 0, 2) !== '${' && substr($search, -1) !== '}') {
            //было - $search = '${'.$search.'}';
            $search = '/\$\{.*?'.$search.'.*?\}/is';
        }
    
        if(!is_array($replace)) {
            //$replace = utf8_encode($replace);
        }
    
        $this->_documentXML = preg_replace($search, $replace, $this->_documentXML);
    }
    
  6. Создать шаблон документа .docx с метками в тексте документа типа ${имя_переменной}, например ${number}.
  7. Подключить библиотеку в файле:
    include_once 'PHPWord.php'; //подключение библиотеки
    $word = new PHPWord(); //создание документа
    $document = $word->loadTemplate('act_template.docx'); //загрузка шаблона документа
    $document->setValue('number', $number_param); //заполнение метки значением
    $document->setValue('year', $year_param);
    $document->save('file_act_'.$number_param.'.docx'); //сохранение файла в файловой системе bitrix
    

    Библиотека PHPWord располагает большим количеством методов для изменения свойств документа, форматирования текста, разделов документа, добавления изображений, таблиц, списков и др.

18.09.2018 /
Комментарии (0)