Google Suite - Apps Script - загрузка слайдов в виде файлов PNG через API

Всем доброе утро. Я написал короткий сценарий, который пакетно создает [одностраничные] слайды Google на основе строк из электронной таблицы. Находясь в цикле для каждого создания, я хотел бы создать PNG слайда на Google Диске (или загрузить на рабочий стол пользователя). Эти изображения должны быть такими же, как если бы пользователь щелкнул «Файл»> «Загрузить»> «PNG» - для тяжелого мелкого текста требуется полный проектор HD - поэтому я не верю, что могу использовать функцию «Миниатюра», размер которой ограничен 1600 пикселями.

В приведенном ниже коде возникает ошибка «Преобразование текста / html в изображение / png не поддерживается», поэтому я не уверен, является ли это ограничением API или проблемой моего кодирования. Заранее спасибо.

  var options =
     {
       "contentType" : "image/PNG"
     };
  var url = 'https://docs.google.com/presentation/d/' + presentationCopyId + '/export/PNG';
  var response = UrlFetchApp.fetch(url, options);
  var image = response.getAs(MimeType.PNG);
  image.setName(SlideName);
  DriveApp.createFile(image);  

person Joe_Codes    schedule 21.01.2020    source источник


Ответы (2)


Да, это возможно.

Вы можете использовать API слайдов Google и сделать файл PNG для каждой страницы слайда Google.

Вот код, НО сначала вам нужно включить API, как показано ниже

  1. открыть редактор скриптов
  2. нажмите на ресурсы- ›Расширенные службы Google
  3. Включите Google Slide API и Drive API.
  4. нажмите ОК

теперь скопируйте и вставьте этот код и напишите свой идентификатор слайда в presentationID.

function generateScreenshots() {
  
  var presentationId = "***ADD YOUR Google Slide ID Only***";
  var presentation = SlidesApp.openById(presentationId);
  var baseUrl =
    "https://slides.googleapis.com/v1/presentations/{presentationId}/pages/{pageObjectId}/thumbnail";
  var parameters = {
    method: "GET",
    headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
    contentType: "application/json",
    muteHttpExceptions: true
  };

  // Log URL of the main thumbnail of the deck
  Logger.log(Drive.Files.get(presentationId).thumbnailLink);

  // For storing the screenshot image URLs
  var screenshots = [];

  var slides = presentation.getSlides().forEach(function(slide, index) {
    var url = baseUrl
      .replace("{presentationId}", presentationId)
      .replace("{pageObjectId}", slide.getObjectId());
    var response = JSON.parse(UrlFetchApp.fetch(url, parameters));

    // Upload Googel Slide image to Google Drive
    var blob = UrlFetchApp.fetch(response.contentUrl).getBlob();
    DriveApp.createFile(blob).setName("Image " + (index + 1) + ".png");

    screenshots.push(response.contentUrl);
  });

  return screenshots;
}
person Zenilkumar 99    schedule 11.09.2020
comment
Большое тебе спасибо. Да - похоже, Google добавил поддержку PNG. Отличные новости для всех нас. Я ценю то, что вы ныряете туда. - person Joe_Codes; 27.10.2020
comment
Отличный ответ! Рад снова видеть это. - person Rafa Guillermo; 27.10.2020

Этот ответ устарел и оставлен для целей документации, но см. другой ответ.


Отвечать:

К сожалению, невозможно экспортировать слайды как файл PNG с помощью API-интерфейсов Slides или Drive.

Больше информации:

Согласно документации для экспорт файлов презентаций:

  • application/vnd.openxmlformats-officedocument.presentationml.presentation
  • application/vnd.oasis.opendocument.presentation
  • application/pdf
  • text/plain

Попытка экспорта в тип image/png MIME приводит к следующей ошибке:

Преобразование текста / HTML в изображение / PNG не поддерживается.

В целях тестирования я попытался использовать конечную точку /export/pdf и выполнить второе преобразование в PNG оттуда следующим образом:

function slidesAsPngAttempt() {
  var presentationCopyId = "1Loa...pQs";  
  var options =
      {
        "contentType" : "application/pdf"
      };
  // for exporting to pdf the /export/pdf needs to be all lower case to avoid 404
  var url = 'https://docs.google.com/presentation/d/' + presentationCopyId + '/export/pdf';  
  var response = UrlFetchApp.fetch(url, options);
  var pdfAsblob = response.getBlob();
 
  var image = pdfAsblob.getAs('image/png');
  
  image.setName(DriveApp.getFileById(presentationCopyId).getName());
  DriveApp.createFile(image);  
}

К сожалению, аналогичная ошибка возникает при запуске var image = pdfAsblob.getAs('image/png'):

Преобразование из application / pdf в изображение / png не поддерживается.

Из той же справочной документации по типам экспорта MIME единственными типами экспорта, доступными для файлов PDF, являются:

  • text/csv
  • text/tab-separated-values
  • application/zip

К сожалению, это невозможно. Я знаю, что это, как правило, плохие новости, но надеюсь, что это будет вам полезно!

Использованная литература:

person Community    schedule 22.01.2020
comment
Цените это, я боялся, что это может быть так. PDF-файл может действительно подойти для моего процесса. Однако изменение приведенного выше кода оставило мне учетную запись PDF of One. Все о гугле. Войдите, чтобы продолжить. Дублированный слайд имеет разрешение на просмотр ссылки (общий доступ). Есть ли другая аутентификация / настройка, которую я должен вызвать? - person Joe_Codes; 22.01.2020