Артем Пищулин,
Произвольное значение сейчас передать нельзя, перед вставкой дергается \Bitrix\DocumentGenerator\Body\DocxXml::printValue() - там строка подготавливается для вставки в xml.
По поводу работы с контентом - в примере $content - это не содержимое xml-файла, это весь docx файл, который представляет собой zip-архив. Работать с ним напрямую нельзя, надо сначала его распаковать, найти внутри нужный xml и работать уже с ним.
Для примеров можно посмотреть \Bitrix\DocumentGenerator\Body\ZipDocument::open() - тут архив распаковывается
потом через \ZipArchive::getFromName() - можно получить доступ к xml-файлу и работать с его контентом.
После работы надо сохранить содержимое через \ZipArchive::addFromString()
Вот расширенный прошлый пример
Произвольное значение сейчас передать нельзя, перед вставкой дергается \Bitrix\DocumentGenerator\Body\DocxXml::printValue() - там строка подготавливается для вставки в xml.
По поводу работы с контентом - в примере $content - это не содержимое xml-файла, это весь docx файл, который представляет собой zip-архив. Работать с ним напрямую нельзя, надо сначала его распаковать, найти внутри нужный xml и работать уже с ним.
Для примеров можно посмотреть \Bitrix\DocumentGenerator\Body\ZipDocument::open() - тут архив распаковывается
потом через \ZipArchive::getFromName() - можно получить доступ к xml-файлу и работать с его контентом.
После работы надо сохранить содержимое через \ZipArchive::addFromString()
Вот расширенный прошлый пример
Код |
---|
\Bitrix\Main\EventManager::getInstance()->addEventHandler('documentgenerator', 'onCreateDocument', function($event){ $document = $event->getParameter('document'); $fileId = $document->FILE_ID; $content = \Bitrix\DocumentGenerator\Model\FileTable::getContent(); $content = processDocx($content); \Bitrix\DocumentGenerator\Model\FileTable::updateContent($fileId, $content); }); function getTemporaryFile($content) { $fileName = \CTempFile::GetFileName(); $file = new \Bitrix\Main\IO\File($fileName); if($file->putContents($content) !== false) { return $file; } } function processDocx($content) { $file = getTemporaryFile($content); $zip = new \ZipArchive(); $zip->open($file->getPhysicalPath()); $documentContent = $zip->getFromName('word/document.xml'); $documentContent = $documentContent; // some modification $zip->addFromString('word/document.xml', $documentContent); $zip->close(); $content = $file->getContents(); $file->delete(); return $content } |