@esvlad
Веб-разработчик

Как вставить в 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);

Собственно вопрос, правильно ли я думаю и где взять данные о позиции заменяемого текста?
  • Вопрос задан
  • 316 просмотров
Решения вопроса 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);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 07:58
500 руб./в час
18 апр. 2024, в 07:22
45000 руб./за проект
18 апр. 2024, в 01:12
150000 руб./за проект