Замена меток в docx

Аватар пользователя godzone godzone 26 февраля 2019 в 12:42

Подтолкните в сторону решения следующей задачи:
Есть вордовский документ-шаблон, лежащий на сервере, в котором в тексте прописаны определенны метки, к примеру {name}.
Как можно заменить их на значения, вводимые в поля ноды, с последующим скачиванием заполненного шаблона?

Лучший ответ

Аватар пользователя ivnish ivnish 26 февраля 2019 в 13:00

Да, docx - это xml внутри zip'а. Можно распаковать его, изменить, и запаковать обратно без использования сторонних библиотек.

Комментарии

Аватар пользователя Orion76 Orion76 26 февраля 2019 в 12:56

"распарсить" шаблон какой либо библиотекой для работы с docx-форматами документов.

А вообще, docx - это банальный xml определенной структуры, завернутый в zip.

теоретически, можно на базе подобного документа сделать twig-шаблон для нужной ноды.
заполнять его стандартно и отдавать браузеру завернув в zip.

Думаю, должны быть готовые библиотеки-модули для подобных действий.

Аватар пользователя ivnish ivnish 26 февраля 2019 в 13:00

Да, docx - это xml внутри zip'а. Можно распаковать его, изменить, и запаковать обратно без использования сторонних библиотек.

Аватар пользователя bumble bumble 26 февраля 2019 в 14:12

Ребят, вы видели этот "распакованный" XML? Не такой уж он и банальный )))
Я когда-то PHPWord'ом подменял, но давно было, и исходников уже нет.

Аватар пользователя godzone godzone 26 февраля 2019 в 14:19

phpWordoм тоже делал, только на 7ке.. тут в 8ке выпилили php, поэтому данный метод уже не канает..

Аватар пользователя Orion76 Orion76 26 февраля 2019 в 14:34

А что там не банального, теги они и в Африке теги..-)

даже не так - текст он и в Африке текст.

  • Распаковываем docx-шаблон в специальныю папочку.
  • из xml-файла с контентом делаем twig-шаблон
  • при запросе ноды в docx-формате прогоняем twig-шаблон через twig-"движок" .
  • из "вывода" шаблона и остальных xml собираем обратно docx
  • отдаем его браузеру

Даже наверное twig-конструкции вывод переменных ( {{name}} и т.п. можно будет прямо в docx-шаблоне вставлять в нужные места-)

Аватар пользователя bumble bumble 26 февраля 2019 в 14:50
1

Жесть... )) Вместо использования "нормальных" инструментов - городить непонятно-что.
А если изменить нужно шаблон? Снова все проделываем?

Orion76 wrote:
из xml-файла с контентом делаем twig-шаблон

Orion76 wrote:
из "вывода" шаблона и остальных xml собираем обратно docx

docx - это набор отборнейших XML-файлов, написанных машинами, для машин.

Аватар пользователя Orion76 Orion76 26 февраля 2019 в 18:40

Ну это просто один из вариантов сделать "генерацию" docx-файлов без лишних библиотек, так сказать, только силами drupal-ядра.
Хм.. возможно мне скоро пригодиться..-)

bumble wrote:

docx - это набор отборнейших XML-файлов, написанных машинами, для машин.

Зловеще звучит-)

Что, машины вот так взяли и всё сами написали?-)

Работал я с OpenXML.. ничего невозможного для "не машины" нет..
Прочитал спецификацию и вперед.
Тем более что в предложенном варианте xml совсем не нужен..
Просто заменить twig-"токены" на значения стандартными возможностями Drupal 8.

Аватар пользователя marassa marassa 26 февраля 2019 в 15:02

Вообще-то прямо в ядре восьмерки есть вполне годные xml-декодер и xml-энкодер от Symfony. Можно одной практически строчкой вогнать xml-файл в php-массив, найти и заменить что нужно, и выгнать обратно в xml. Зачем тут twig-то?