Как преобразовать все документы Google в папке в PDF-файлы?

#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() сделал трюк.