Цитата |
---|
Антон Горбылев написал:
Цитата |
---|
Александр Солошенко написал: Я так понимаю, что библиотека PhpWord уже подключена к битрикс |
В поставке продукта нет PhpWord. Для парсинга docx файлов используются свои классы.
Если вам надо создать файл на основе шаблона, то можете воспользваться апи модуля documentgenerator. Если вам надо создать файл с нуля, то придется писать это самостоятельно (и библиотеки тоже подключать самостоятельно) |
я научился в php открывать файл docx, разархивировать, менять текст в папке word в документе document.xml, а также в папке _rels документ document.xml.rels. Однако мой бизнес-процесс способен генерировать от 4 до по сути бесконечности гиперссылок (в реальности около 50 может быть). И, если Вы посмотрите на структуру файла document.xml.rels с 1 гиперссылкой и скажем с 4-мя, то гиперссылкам присваиваются разные rId и записываются в хаотичном порядке по всему тексту (я по крайней мере логику присвоения очередной связи номера rId так и не определил). То есть я не могу просто сказать, запиши мне ссылку 1 в rId1, 2 в rId 2...148 в rId 148. Например, если в тексте 1 гиперссылка, то rId, отвечающий за гиперссылку равен 4, а если ссылки 4, то rId получают значения 2,6,5,4 и идентификаторы на другие связи на стиль, тему и т. д. в документах с 1 и с 4 ссылками имеют разные значения и по-разному вставлены в документ.
И вот как корректно решить эту задачу?
1. готовим шаблон.
2. выдаем данные из бп и записываем в шаблон.
3. считаем в бп количество ссылок.
4. открываем файл xml как одну из составляющих zip-архива.
5. заменяем [*] на перенос строки с "-" в начале.
6. в зависимости от количества ссылок готовим документ document.xml.rels.
7. удаляем содержимое документа document.xml.rels и подставляем нужный текст в зависимости от количества ссылок.
8. находим текст начинающийся на [url= и заканчивающийся на ], этот текст становится названием гиперссылки, положенной в одном из индентификаторов в документе document.xml.rels.
9. сохраняем и выдаем файл.
В этом случае мне нужно подготовить 50 разных документов document.xml.rels и каждый раз считывать его содержимое, предварительно выбрав нужный в зависимости от количества ссылок, записывать в новый документ document.xml.rels и подменять шаблонные ссылки новыми из БП. Опять же насколько правильно будут отображаться гиперссылки большой вопрос, ведь в документе кроме гиперссылок есть еще текст и другие связи, которые также влияют на присвоение идентификатору номера rId. По сути не узнав логики процесса присвоения rId в документе document.xml.rels задача становится не выполнимой.
Есть мысли?