Алексей Щербаков,
вот работающий код, проверил у себя
[CODE]<?
use \Bitrix\Main\{ Loader, IO };
use \Bitrix\DocumentGenerator;
require_once __DIR__. '/bitrix/modules/main/include/prolog_before.php';
Loader::includeModule('documentgenerator');
$file = new IO\File( __DIR__ . '/upload/rest_template.docx' );
$body = new DocumentGenerator\Body\Docx($file->getContents());
$body->normalizeContent();
$body->setValues([
'Table' => new DocumentGenerator\DataProvider\ArrayDataProvider(
[
[
'Name' => 'Item name 1',
'Price' => '$111.23',
'Image' => __DIR__.'/upload/image.jpeg',
],
[
'Name' => 'Item name 2',
'Price' => '$222.34',
'Image' => null,
]
],
[
'ITEM_NAME' => 'Item',
'ITEM_PROVIDER' => DocumentGenerator\DataProvider\HashDataProvider::class,
]
),
'TableItemName' => 'Table.Item.Name',
'TableItemImage' => 'Table.Item.Image',
'TableItemPrice' => 'Table.Item.Price',
'TableIndex' => 'Table.INDEX',
]);
$body->setFields([
'TableItemImage' => ['TYPE' => 'IMAGE'],
]);
$result = $body->process();
if(!$result->isSuccess())
{
echo '<pre>';
print_r($result->getErrorMessages());
echo '</pre>';
}
else
{
$content = $body->getContent();
file_put_contents(__DIR__.'/body_test.docx', $content);
}
[/CODE]
конструктор ArrayDataProvider принмает на вход два массива, в первом - значения, во втором - описание
INDEX - это внутренний ключ ArrayDataProvider, его значение не надо передавать снаружи
вот работающий код, проверил у себя
[CODE]<?
use \Bitrix\Main\{ Loader, IO };
use \Bitrix\DocumentGenerator;
require_once __DIR__. '/bitrix/modules/main/include/prolog_before.php';
Loader::includeModule('documentgenerator');
$file = new IO\File( __DIR__ . '/upload/rest_template.docx' );
$body = new DocumentGenerator\Body\Docx($file->getContents());
$body->normalizeContent();
$body->setValues([
'Table' => new DocumentGenerator\DataProvider\ArrayDataProvider(
[
[
'Name' => 'Item name 1',
'Price' => '$111.23',
'Image' => __DIR__.'/upload/image.jpeg',
],
[
'Name' => 'Item name 2',
'Price' => '$222.34',
'Image' => null,
]
],
[
'ITEM_NAME' => 'Item',
'ITEM_PROVIDER' => DocumentGenerator\DataProvider\HashDataProvider::class,
]
),
'TableItemName' => 'Table.Item.Name',
'TableItemImage' => 'Table.Item.Image',
'TableItemPrice' => 'Table.Item.Price',
'TableIndex' => 'Table.INDEX',
]);
$body->setFields([
'TableItemImage' => ['TYPE' => 'IMAGE'],
]);
$result = $body->process();
if(!$result->isSuccess())
{
echo '<pre>';
print_r($result->getErrorMessages());
echo '</pre>';
}
else
{
$content = $body->getContent();
file_put_contents(__DIR__.'/body_test.docx', $content);
}
[/CODE]
конструктор ArrayDataProvider принмает на вход два массива, в первом - значения, во втором - описание
INDEX - это внутренний ключ ArrayDataProvider, его значение не надо передавать снаружи