Экспорт презентации в PDF с одним слайдом и его заметками на странице - PullRequest
1 голос
/ 04 февраля 2020

Я хотел бы экспортировать презентации в PDF с одним слайдом и его примечаниями на страницу.

Я знаю, как экспортировать презентацию в PDF с помощью Drive API, но не вижу, как я мог бы указать это Я тоже хочу видеть заметки, потому что на данном этапе это просто файл.

И все же возможно сделать это через пользовательский интерфейс, поэтому должен быть способ ...

на самом деле нужно создать новый документ с изображением слайдов в верхней половине каждой страницы и примечаниями в нижней половине и экспортировать его в pdf?

1 Ответ

0 голосов
/ 06 февраля 2020

Читая ваш вопрос, я понимаю, что ваша цель состоит в том, чтобы сделать 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 из скрипта приложений. Обратитесь к связанной документации для получения инструкций по активации этих служб в редакторе сценариев.

Пожалуйста, примите это как одно из возможных решений вашей проблемы, и не стесняйтесь писать мне в ответ с любыми сомнениями. или запросы на дальнейшие разъяснения.

...