Артем Пищулин,
Произвольное значение сейчас передать нельзя, перед вставкой дергается \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
}
|