Как вставить в google docs картинку?
Есть задача: в документе есть текст {{печать}}, нужно его удалить и на его место вставить изображение. Вопрос как это правильно реализовать?
Как я понимаю алгоритм действий следующий: найти и заменить текст
$requests = [];
$requests[] = [
'replaceAllText' => [
'replaceText' => '',
'containsText' => [
'text' => '{{печать}}',
'matchCase' => true
]
],
];
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(['requests' => $requests]);
$service->documents->batchUpdate(DOCUMENT_ID, $batchUpdateRequest);
Потом вставить картинку
$requests = array();
$requests[] = new Google_Service_Docs_Request(array(
'insertInlineImage' => array(
'uri' => IMAGE_URL,
'location' => array(
'index' => 1, //Тут позиция которую нужно указать
)
)
));
$batchUpdateRequest = new Google_Service_Docs_BatchUpdateDocumentRequest(['requests' => $requests]);
$response = $docsService->documents->batchUpdate(DOCUMENT_ID, $batchUpdateRequest);
Собственно вопрос, правильно ли я думаю и где взять данные о позиции заменяемого текста?
Ответы (1 шт):
Автор решения: ESVlad
→ Ссылка
Оказалось все проще, просто нужно было по капаться глубже в теме. Решение:
//Выводим тело документа
$document = $service->documents->get(DOCUMENT_ID, ['fields' => 'body']);
//Перебираем контентную составляющую документа
foreach($document->body->content as $content){
if(!empty($content['paragraph'])){
foreach($content['paragraph']['elements'] as $elements){
//ищем наше значение
$pos = strripos($elements['textRun']['content'], '{{печать}}');
if($pos !== false){
//Когда нашли, записываем его стартовый индекс впеременную
$startIndex = $elements['startIndex'];
}
}
}
}
//Проверка, нашлось ли значение
if(!empty($startIndex)){
$requests = [];
$requests[] = [
'replaceAllText' => [
'replaceText' => '',
'containsText' => [
'text' => '{{печать}}',
'matchCase' => true
]
],
];
//Заменяем слово пустотой
$batchUpdateRequest = new \Google_Service_Docs_BatchUpdateDocumentRequest(['requests' => $requests]);
$service->documents->batchUpdate(DOCUMENT_ID, $batchUpdateRequest);
$requests = [];
$requests[] = new \Google_Service_Docs_Request(array(
'insertInlineImage' => array(
'uri' => 'https://drive.google.com/uc?id=' . IMAGE_ID, //Вставляем картинку которая была загружена в гугл-диск
'location' => array(
'index' => $startIndex, //Наша стартовая позиция
),
'objectSize' => array(
'height' => array(
'magnitude' => 100,
'unit' => 'PT',
),
'width' => array(
'magnitude' => 100,
'unit' => 'PT',
),
)
)
));
//Вставляем изображение
$batchUpdateRequest = new \Google_Service_Docs_BatchUpdateDocumentRequest(['requests' => $requests]);
$service->documents->batchUpdate(DOCUMENT_ID, $batchUpdateRequest);
}