За последние 24 часа нас посетили 22524 программиста и 1143 робота. Сейчас ищут 542 программиста ...

php и docx

Тема в разделе "PHP для новичков", создана пользователем marlin, 6 сен 2020.

  1. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    Приветствую.
    Если кто то работал с документами docx через php то просьба сориентировать что к чему, на теперешний момент.
    В доставшемся проекте вижу код, где такой файл вот так открывают:
    PHP:
    1.     public function load ($filename)  // $filename - это путь к файлу шаблону docx
    2.     {
    3.         $this->template = $filename;
    4.         $this->document = '';
    5.  
    6.         $archive = new \ZipArchive();
    7.  
    8.         if ($archive->open($filename))
    9.         {
    10.             $this->document = $archive->getFromName('word/document.xml');
    11.         }
    12.     }
    А чтобы таблицу вставить, такие какие то шифрограммы вставляют:

    PHP:
    1. $code = '</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="3686" w:type="dxa"/><w:tcBorders><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders></w:tcPr><w:p w:rsidR="001841F4" w:rsidRPr="001841F4" w:rsidRDefault="001841F4" w:rsidP="005F7249"><w:pPr><w:rPr><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr></w:pPr><w:r w:rsidRPr="001841F4"><w:rPr><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr><w:t>' .
    2.                     Html::encode($user->getFullName()) .
    Может кто подскажет что это за подход, где по нему дока?
    А может есть что получше? Задача по сути - есть шаблон, надо наполнять его данными.
    Вот часть кода выше участвует список пользователей вставить, но какой то он совсем не красивый.
    Желательно без установки дополнительного ПО, но вообще то на сервере для одной из задач установлен - libreoffice...
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    Смысл такой, что docx это открытый формат.... архив, внутри которого обычные XML

    судя по всему - на низком уровне фигачат содержимое...

    получше - воспользуетесь готовыми библиотеками для работы с DOCX
     
  3. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    В принципе сьедобный форматик чтобы и на низком уровне пофигачить.
    Но не без сложностей, например в документ просто текст вставляешь без всякого форматирования
    Код (Text):
    1. $(number)
    , а оно такое в xml как есть не вставляет почему то, а дробит на части:
    Код (Text):
    1.             <w:r w:rsidRPr="00BE73E7">
    2.                 <w:rPr>
    3.                     <w:b/>
    4.                     <w:bCs/>
    5.                     <w:sz w:val="24"/>
    6.                     <w:lang w:val="ru-RU"/>
    7.                 </w:rPr>
    8.                 <w:t>${</w:t>
    9.             </w:r>
    10.             <w:r>
    11.                 <w:rPr>
    12.                     <w:b/>
    13.                     <w:bCs/>
    14.                     <w:sz w:val="24"/>
    15.                 </w:rPr>
    16.                 <w:t>number</w:t>
    17.             </w:r>
    18.             <w:r w:rsidRPr="00BE73E7">
    19.                 <w:rPr>
    20.                     <w:b/>
    21.                     <w:bCs/>
    22.                     <w:sz w:val="24"/>
    23.                     <w:lang w:val="ru-RU"/>
    24.                 </w:rPr>
    25.                 <w:t>}</w:t>
    26.             </w:r>
    Поэтому токен этот чтобы заменить на свое, требуется хитренькая регулярка, благо она сделана предыдущими
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Ну тогда можно его дёргать, конечно. А вообще, есть https://phpword.readthedocs.io/en/latest/ Мне с ним задач пока не попадалось, с либриофисом сейчас наши джависты радуются, из php я с ним ещё не работал
     
  5. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    Вручную формировать оказался минус - ворд такие файлы нормально открывает, а libreoffice нет, таблицу не показывает, хотя я заготовку брал из нулевого документа, созданного в libreoffice.
    Придется наверное через расширение PHPOffice/PHPWord делать, раз такие сложности.
    В этом наверное проще разобраться чем с тем как с внешней программой libreoffice работать, там через нее только конвертация сделана, через exec()...