Google Suite - Apps Script - 通过 API 将幻灯片下载为 PNG 文件

Joe*_*des 0 google-apps-script google-slides google-slides-api

大家早上好。我编写了一个简短的脚本,它根据电子表格中的行批量创建 [单页] Google 幻灯片。在每次创建的循环中,我想在 Google Drive 中创建幻灯片的 PNG(或在用户的桌面上下载)。这些图片应该与用户单击文件>下载>PNG 具有相同的规格 - 沉重的小文本需要完整的投影仪高清 - 所以我不相信我可以使用似乎限制为 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);  
Run Code Online (Sandbox Code Playgroud)

小智 5

对的,这是可能的。

您可以使用 Google 幻灯片 API 并为 Google 幻灯片的每一页制作一个 PNG 文件。

这是代码, 但首先您必须启用 API,如下所示

  1. 打开脚本编辑器
  2. 点击资源->高级谷歌服务
  3. 启用 Google 幻灯片 API 和 Drive API 。
  4. 点击确定

现在复制并粘贴此代码,并在presentationID 中写入您的幻灯片ID。

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;
}
Run Code Online (Sandbox Code Playgroud)