image.asInlineImage (). getBlob () зависает навсегда - PullRequest
0 голосов
/ 20 сентября 2019

Следующая новая проблема возникает в сценарии надстройки Google-Docs, я думаю, не изменив ни сценарий, ни исходный документ.

С этого дня следующий код начал висеть в строке: var blob = sourceImage.asInlineImage().getBlob().Регистратор правильно регистрирует ширину и высоту изображения, но никогда не регистрирует «blobbed».

var sourceImage = cell.getChild(m).getChild(0);
var imageHeight = sourceImage.getHeight();
var imageWidth = sourceImage.getWidth();
Logger.log('imageWidth:' + imageWidth + ', imageHeight:' + imageHeight);
var blob = sourceImage.asInlineImage().getBlob();
Logger.log('blobbed');

Я попытался полностью заменить исходное изображение новым изображением, без изменения размера и отсечения.Это привело к правильному выводу новой ширины и высоты в журнале, но опять-таки код никогда не проходит через строку getBlob (), никакие исключения не регистрируются (как отчеты об ошибках Stackdriver, так и журналы Stackdriver пусты).Та же проблема возникает с другими исходными документами.

Исходные документы находятся на общем диске.Примерно неделю назад скрипт работал.Что-то делать с разрешениями?Что-то изменилось в API?Есть идеи, что может быть причиной этого?

1 Ответ

1 голос
/ 20 сентября 2019

При подготовке минимального полного проверяемого примера я обнаружил, что проблема была в element.copy().Скрипт копировал элементы с одной страницы на другую.Код сначала сделал копию, затем прошел через потомков копии.Очевидно, element.copy() копирует все дочерние элементы, но если один из дочерних элементов содержит изображение, вы не можете использовать getBlob () на скопированном изображении.

Вместо:

var element = templateBody.getChild(i).copy();
...
newParagraph = target.appendParagraph(element)
...
newTable = body.appendTable(element);

use:

var element = templateBody.getChild(i);
...
newParagraph = target.appendParagraph(element.copy())
...
newTable = body.appendTable(element.copy());

Не используя element.copy (), теперь вы можете использовать getBlob () для подэлемента элемента таблицы типа:

element.getChild(j).getCell(k).getChild(m).getChild(0).asInlineImage().getBlob();

Остается неясным, почему старыйверсия кода работала до прошлой недели или около того.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...