За последние 24 часа нас посетили 18556 программистов и 1599 роботов. Сейчас ищут 896 программистов ...

Создание docx файлов в php

Тема в разделе "Прочие вопросы по PHP", создана пользователем nodemind, 25 окт 2013.

  1. nodemind

    nodemind Новичок

    С нами с:
    25 окт 2013
    Сообщения:
    3
    Симпатии:
    0
    Столкнулся с такой задачей. Заказчику нужно отправление по почте заявок в формате Word, а именно docx.
    Ну учитывая что этот формат, это xml запакованный в zip я принял решение, просто брать папку с распакованным docx, в файле document.xml менять текст и паковать снова в zip. Функция приняла такой вид:

    //Создаем файл заявки
    $src_dir = www_dir."/lib/word/1/";
    $fileName = www_dir."/lib/word/1.docx";

    $zip = new ZipArchive();
    if (is_dir($src_dir)) {
    if ($zip->open($fileName, ZIPARCHIVE::CREATE ) == true) {
    //добавляем файлы в архив все файлы из папки src_dir
    $dirHandle = opendir($src_dir);

    $mas=_m_cl::findDirectory($src_dir);

    foreach($mas as $mas1) {
    if ($mas1=="/word/document.xml") {
    $zip->addFromString($mas1, str_replace('ЫВАЫВА',"ФЫВ",file_get_contents($src_dir.$mas1)));
    } else {
    $zip->addFile($src_dir.$mas1,$mas1);
    };
    };

    };
    };
    //закрываем архив
    $zip->close();

    Вообщем, все вроде создается, и архив. Который Word не открывает, а пишет ошибку.
    Но что интересно, если его переименовать в zip, разархивировать тем же WinRar, а потом снова заархивировать в zip, и переименовать в docx, то все отлично открывается в Word.
    Отсюда следует что ZipArchive создает архив в каком то непонятном для Word формате.
    Мне важен именно такой подход, поскольку Word можно использовать как редактор шаблонов.

    Можете подсказать, что не так с ZipArchive, и в каком формате нужно архивировать, чтобы Word видел этот docx?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    странно
     
  3. nodemind

    nodemind Новичок

    С нами с:
    25 окт 2013
    Сообщения:
    3
    Симпатии:
    0
    та не то слово. смотрел инфо файлов отличаются на 1-2% по размеру. степень сжатия одинаковая - 15%. ну что делать? может это денвер под windows странный. сейчас попробую на сервере.

    Добавлено спустя 9 минут 52 секунды:
    и на внешнем хостинге тоже самое. не открывает сгенериный на внешнем хостинге docx.
    переписал на ПК распаковал, запаковал, переименовал - открывает.
    разница в байтах 15537 - глючный, 16500 - новый что открывается. степень сжатия 12% и там и там.
     
  4. nodemind

    nodemind Новичок

    С нами с:
    25 окт 2013
    Сообщения:
    3
    Симпатии:
    0
    еперный театр. все разобрался. извиняюсь за беспокойство.
    переработался )))

    в архиве названия файлов сохранял со слешем вначале, типа
    "/customXml/выаыва/ыва/"
    а нужно
    "customXml/выаыва/ыва/"
    поэтому при распаковке, слеши исчезали и в новом архиве было все ок.
    дописал процедуру. заработало.
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Круто чувак. Как раз стоит такая же задача. Очень вовремя.
     
  6. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    это вы мало шаблонов поклепали .. пока вам везет - почитайте тут мои мучения
    viewtopic.php?f=2&t=46168

    рано или поздно он сделает свое грязное дело =)
    кстати не помню там писал или нет - на работе в 2007 сохранял - более менее работало .. дома же просто пересохранил все метки слетели и str_replace уже не мог ничего менять ((