Читая ваш вопрос, я понимаю, что ваша цель состоит в том, чтобы сделать PDF из слайда в следующем формате: во-первых, вам нужен сам слайд; и на его нижней части вы хотите, чтобы связанные с ним заметки докладчиков. Если мое понимание правильное, вы можете использовать следующие функции для достижения своего намерения:
function fromSlideToPDF(slideID) {
var docID = DocumentApp.create("Brief Doc").getId();
var docBody = DocumentApp.openById(docID).getBody();
var slides = SlidesApp.openById(slideID).getSlides();
var requestAuth = {
headers: {
Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
}
}
for (var i = 0; i < slides.length; i++) {
var requestURL = "https://slides.googleapis.com/v1/presentations/" +
slideID + "/pages/" + slides[i].getObjectId() + "/thumbnail";
var response = UrlFetchApp.fetch(requestURL, requestAuth);
var thumbnailURL = JSON.parse(response.getContentText());
var thumbnailBlob = UrlFetchApp.fetch(thumbnailURL.contentUrl, requestAuth)
.getBlob();
docBody.appendImage(thumbnailBlob).setWidth(611).setHeight(344);
docBody.appendParagraph(slides[i].getNotesPage().getSpeakerNotesShape()
.getText().asRenderedString())
docBody.appendPageBreak();
}
DocumentApp.openById(docID).saveAndClose();
fromDocToPDF(docID);
DriveApp.getFileById(docID).setTrashed(true);
}
function fromDocToPDF(docID) {
var doc = DriveApp.getFileById(docID);
var PDF = doc.getAs("application/pdf");
var folderID = doc.getParents().next().getId();
var request = {
title: "PDF of " + doc.getOwner().getName(),
parents: [{
"id": folderID
}],
}
Drive.Files.insert(request, PDF);
}
В целях разъяснения я собираюсь описать подход этого кода. Основная функция - fromSlideToPDF()
, которая конвертирует из Google Slides в PDF запрос только идентификатора презентации. Сначала он создаст фиктивный Do c с .create()
, получит свое тело с .getBody()
и прочитает слайды оригинальной презентации, используя .openById()
и .getSlides()
. Затем он будет повторять каждый слайд и запрашивать его миниатюру для включения в фиктивный Do c. Под каждой миниатюрой скрипт также добавит связанные заметки докладчика. После завершения итерации функция сохранит изменения в фиктивной переменной Do c с .saveAndClose()
.
Затем будет вызвана вторая функция для преобразования фиктивной переменной Do c в окончательный PDF. Для этого sh он будет читать Do c в формате PDF с .getAs()
и своей первой родительской папкой (обратите внимание, что один файл может быть размещен в разных папках) с помощью .getParents()
и .next()
. Затем скрипт извлечет идентификатор родительской папки с помощью .getId()
. Наконец, эта вторая функция создаст и выполнит запрос загрузки файла, как описано здесь .
После того, как вторая функция преобразует фиктивный Do c в файл PDF в той же папке, первая функция удалит фиктивный файл с .setTrashed()
.
Наконец, я хочу упомянуть, что я использую два различных расширенных сервиса для Drive и Слайды , для выполнения запросов API из скрипта приложений. Обратитесь к связанной документации для получения инструкций по активации этих служб в редакторе сценариев.
Пожалуйста, примите это как одно из возможных решений вашей проблемы, и не стесняйтесь писать мне в ответ с любыми сомнениями. или запросы на дальнейшие разъяснения.