#pdf #google-apps-script #google-drive-api #pdf-generation #google-workspace
#PDF #google-приложения-скрипт #google-drive-api #генерация PDF #google-workspace
Вопрос:
Я создал простой скрипт Google Apps для преобразования всех документов Google в папке на моем диске в PDF-файлы и сохранения их в той же папке, которая работает:
function convertDocsToPDF() {
var folderId = "asdf";
var folder = DriveApp.getFolderById("folderId");
var invoices = folder.getFiles();
while (invoices.hasNext()) {
var invoice = invoices.next();
var id = invoice.getId();
var file = DriveApp.getFileById(id);
var PDFblob = file.getAs(MimeType.PDF);
var PDF = DriveApp.createFile(PDFblob);
PDF.moveTo(file.getParents().next());
}
}
Я написал это, чтобы протестировать преобразование, но хочу интегрировать его в более длинный скрипт. Более длинный скрипт создает счета-фактуры из шаблона, заменяя ##TextToReplace##
стилизованные поля данными, которые я извлекаю из электронных таблиц.
Когда я пытаюсь интегрировать convertDocsToPDF()
функциональность, все PDF-файлы выглядят как шаблон, а не счет-фактура. Когда я смотрю на документ счета-фактуры, когда сценарий завершен, он выглядит корректно, все поля заменены правильными данными, но PDF выглядит просто как копия шаблона.
Есть ли задержка между тем, когда мой скрипт редактирует счет-фактуру, и когда он сохраняется на моем диске, так что при преобразовании в PDF счет-фактура отображается перед замененным текстом?
Комментарии:
1. У меня была такая же проблема, и я обнаружил, что полезно позвонить
Document.saveAndClose()
перед созданием pdf. Я полагаю, что это удаляет изменения, которые, как вы предполагаете, могут быть проблемой. Смотрите developers.google.com/apps-script/reference/document /…2. @AaronDuniganAtLee, спасибо за ваш комментарий / ответ. saveAndClose() кажется многообещающим, и я попробую.
Ответ №1:
Для отправки правки на сервер требуется время.
Эта задержка может быть очень небольшой, но скрипт будет быстрее.
Что вы можете попробовать:
- Используйте
Document.saveAndClose()
, как предложил @Aaron Dunigan AtLee. - Используйте
Utilities.sleep()
в стратегических местах вашего скрипта. - Сначала создайте цикл для создания счетов-фактур, а затем конвертируйте в PDF.
Комментарии:
1. спасибо за ваш ответ. Я собираюсь попробовать как saveAndClose(), так и sleep() . Последний вариант может сработать, но поскольку я создаю PDF-файлы в том же цикле, что и счета-фактуры (чтобы я мог использовать некоторые из тех же значений, которые я извлекаю из своей электронной таблицы, для заполнения счета, как я делаю для создания PDF и черновика электронной почты), я собираюсь пропустить этот вариантпоскольку мне пришлось бы каким-то образом повторно связать эти значения из счета-фактуры с черновиком PDF / email.
2.
Document.saveAndClose()
сделал трюк.