| Цитата |
|---|
| Александр Солошенко написал: Я по крайней мере логики не нашел. |
1. в document.xml по r:id определяем ID = rId4
2. в файле: document.xml.rels находим блок: Id=rId4
3. заменяем в нем Target="link.html"
1. в document.xml по r:id определяем ID = rId4 2. в файле: document.xml.rels находим блок: Id=rId4 3. заменяем в нем Target="link.html" |
|||
|
|
|
|
Александр Солошенко,задача решаемая. Эту же задачу я решил при вставке в документ картинок / списков. Там такая же логика.
Делается это следующим образом (по крайней мере у меня) 1. Проходите по document.xml, где делаете все замены. При этом вам надо для каждой ссылки генерировать уникальынй rId (посмотрите \Bitrix\DocumentGenerator\Body\Xml::getRandomId()). Вставляйте тег с вашим идентификатором. Сохраните в отдельной переменной соотношение идентификатор => ссылка 2. Пройдитесь по вашему массиву идентификаторов и вставьте что надо в rels Ну и помните, что кроме document.xml там могут быть и другие .xml файлы, которые, по-хорошему, надо также обработать. |
|
|
|
|
|
Антон, я изучил docx архив с картинками. Задача с гиперссылками действительно точно такая же. А где найти код php, которым вы редактируете document.xml и document.rels.xml?
|
|
|
|
|
|
Я кажись понял, /home/bitrix/www/bitrix/modules/documentgenerator/lib/body/d
|
|
|
|
|
|
|||
|
|
|
|
Антон Горбылев,
у меня стоит следующая задача: необходимо подменять изображение подписи на КП в зависимости от ответственного за сделку. Думаю, сценарий будет следующим: 1. в карточке сотрудника загрузим файлы с росписями. 2. на событии: onBeforeProcessDocument достаю файл соответствующего изображения. 3. подменяю роспись на КП изображением полученным на шаге №2. ACHTUNG!!! вопрос: как сделать 3-й шаг: подменяю роспись на КП изображением полученным на шаге №2. |
|
|
|
|
|
Ахат Баязи,передайте в качестве значения путь к файлу или ид из b_file.
|
|
|
|
|
1. $rootActivity = $this->GetRootActivity(); 2. Открываю как zip-архив сгенерированный файл docx, который сформировался на основе ранее подгруженного шаблона и данных передаваемых из бп. 3. Открываю документ xml и делаю замены так, как Вы указали в пункте 1. 4. Вставляю то, что нужно в rels 5. Сохраняю архив и выдаю пользователю новый файл. Верно? В пункте 3 что нужно использовать? Если можно, то более детально расписать блоки кода (логику). Я не очень силен в php, но хорошо знаю английский и есть большое желание подтянуть php. |
|||
|
|
|
|
Александр Солошенко, в общих чертах верно. По поводу работы с БП не подскажу, посмотрите существующие действия (папка activities).
|
|
|
|
|
|
Александр Чувилёв, список поддерживаемых шрифтов небольшой. Какой-то дефолтный список, что входит в CentOS, подробнее не скажу.
Попробуйте поставить галочку "сохранить шрифт в файле" в шаблоне документа - возможно, поможет (а может и нет). |
|
|
|
|
1. создаем пользовательское поле у сотрудника (тип файл): UF_CRM_SIGN 2. загрузить в него файл росписи сотрудника 3. в шаблоне использовать штатную картинку росписи директора 3. В событии onBeforeProcessDocument делаем подмену росписи директора росписью сотрудника.
|
|||||
|
|
|
|
Антон Горбылев,
Пощупал своими руками, что такое создать документ docx без генератора документов. Действовал по следующему алгоритму: 1. Установил композер 2. Установил библиотеку phpword 3. Подключил файл autoload.php, который расположен в папке vendor, в файле init.php 4. Собственно по подготовленному раннее шаблону разобрал документ на текст и переменные и данные зависимые от переменных 5. В генераторе бизнес-процессов запустил действие "Произвольный PHP-код". Получил текущий бизнес-процесс. 6. Преобразовал данные и записал их в документ docx, после чего сохранил на сервере. Итого вышло 220 строк кода на 1-1,5 страницы документа в зависимости от количества данных(гиперссылок и строк, генерируемых в генераторе бп) и примерно 15 часов работы. Я не профессиональный разработчик php, поэтому код скорее всего можно оптимизировать, но сэкономить получится не более 30-40 строк кода. Вывод: генератор документов мощнейший инструмент, который позволяет создавать документы со скоростью в 10-15 раз быстрее, чем писать ручками, притом еще нужно понимать, что писать. Поэтому автору большой респект. И все-таки функционал гиперссылок очень нужен, хочется верить, что в ближайших релизах появится, а пока пользуемся PHPWord кому нужны, как и мне, гиперссылки из генератора бизнес-процессов. |
|
|
|
|
|
Антон Горбылев, очень нужна помощь
Делаю по мануалу Переопределение провайдеров (добавление своих полей) Если проделываю пример со строкой - работает Если добавляю массив вида
Хочу получить селектор в форме редактирования документа(генерирую договор в сделке) Здесь в секции о Множественных значениях указан формат для "Множественное значение". Если я его использую
Задача вообще такая, в сделку добавлены мультиполя(сайт, телефон, почта) как в лиде. И сайт нужно вывести в генерации документа. |
|||||||
|
|
|
|
Евгений Ющенков,кидайте код вашего провайдера, посмотрю
|
|
|
|
|
|
Антон Горбылев,
Код провайдера сделки.
Вопрос задавал по полю "WEB_SITES" Из метода getWebSites возвращается массив, но в поля редактирования документа это значение не попадает. Ну это я описывал в сообщении выше |
|||||
|
|
|
|
Антон Горбылев,
встала такая задача: при генерации документа, чтоб файл имел определенную определенное название, составленное из переменных. Типа:
1) ловить на событии генерации файла, 2) получить ID сгенерированного файла 3) изменять название файла ? |
|||
|
|
|
|
Ахат Баязи, название файла = переменная {DocumentTitle} + .docx
Пишите в это поле что надо, файл так и будет называться. Если в теле документа должен быть другой заголовок, то добавьте какое-нибудь другое поле для него |
|
|
|
|
ни в настройках генератора ни в БП е нашел. ))) может не там смотрю? |
|||
|
|
|
|
Ахат Баязи,у каждого документа есть поле {DocumentTitle}. Это поле есть, даже если оно не вставлено в шаблон.
Значение этого поля = название файла. Запишите в это поле что хотите и получите такое же название файла. Можете записать через БП, можете через рест, как угодно |
|
|
|
|
|
|||
|
|
|
|
Антон Горбылев,
Поступила новая задача: Необходимо разработать генератор оф. писем. При этом по условиям ТЗ, пользователь может вставлять (копипастить) в тело письма такие объекты, как: 1. таблицы 2. картинки. ================================== ПРЕДВАРИТЕЛЬНОЕ РЕШЕНИЕ: ----------------------------------------------------------- хочу реализовать на основе штатного генератора документа, но столкнулся с рядом проблем: Реализация: 1. на универсальных списках создаем поле (тип: HTML/текст) которое позволяет хранить и копипастить в него содержимое офисного документа. 2. при генерации достаем это поле и подставляем в шаблон генератора. Проблема: т.к. поле содержит HTML-верстку, то генератор ломает таблицу. все поля таблицы отображаются в виде строк. Есть способы преобразовать HTML-таблицу, чтобы можно было подсунуть в генератор документов? |
|
|
|
|