Google apps script 如何使用应用程序脚本更改每页上打印的幻灯片数量

Google apps script 如何使用应用程序脚本更改每页上打印的幻灯片数量,google-apps-script,google-slides-api,Google Apps Script,Google Slides Api,我有一个电子表格,可以通过编程创建包含多张幻灯片的Google幻灯片演示文稿 我想使用应用程序脚本创建这些幻灯片的pdf版本,但每页都有多张幻灯片 我知道如何使用DriveApp.create(blob)获取我的幻灯片的pdf版本,但每页只能制作一张幻灯片 我还知道,我可以访问幻灯片中的“打印设置和预览”设置,以手动实现此功能 不管怎样,我是否可以只用一个脚本来实现这个目标 亲切问候, 布雷特 编辑:为了清晰起见,我附上了我想要的图片。我知道使用幻灯片用户界面是可能的。我想知道是否可以使用应用程

我有一个电子表格,可以通过编程创建包含多张幻灯片的Google幻灯片演示文稿

我想使用应用程序脚本创建这些幻灯片的pdf版本,但每页都有多张幻灯片

我知道如何使用
DriveApp.create(blob)
获取我的幻灯片的pdf版本,但每页只能制作一张幻灯片

我还知道,我可以访问幻灯片中的“打印设置和预览”设置,以手动实现此功能

不管怎样,我是否可以只用一个脚本来实现这个目标

亲切问候,

布雷特

编辑:为了清晰起见,我附上了我想要的图片。我知道使用幻灯片用户界面是可能的。我想知道是否可以使用应用程序脚本。

  • 您希望在一张幻灯片中总结6张幻灯片,并将幻灯片导出为PDF文件
  • 6张幻灯片中的每张幻灯片都是每张幻灯片的图像
如果我的理解是正确的,那么这个变通方法怎么样?不幸的是,在当前阶段,似乎没有在SlidesApp服务和SlidesAPI中直接实现上述功能的方法。我找不到这样的方法。因此,需要考虑解决方法。我挑战实现这一点,因为我认为实现这一点对我和其他用户也很有用

此解决方案的流程如下所示

流量:
  • 将原始幻灯片文件复制为临时文件
  • 检索所有幻灯片的图像。
    • 当幻灯片文件导出为PNG文件时,首页将导出为PNG文件。我用过这个
  • 将检索到的图像放入并排列到临时文件中。
    • 将图像插入幻灯片时,检索大小并更改大小,然后将图像放置到计算位置
  • 将幻灯片导出为PDF文件
  • 删除临时文件。
    • 在这种情况下,临时文件被放入垃圾箱中
  • 示例脚本: 请将此脚本复制并粘贴到脚本编辑器。请设置原始幻灯片的文件ID。在这个示例脚本中,
    col
    row
    分别为3和2。你的问题也是这样。如果更改图像大小和分离,请修改
    wsize
    sep
    wsize
    是图像的宽度。设置此选项后,将计算高度

    function myFunction() {
      // Please set these parameters
      var id = "### file ID ###"; // file ID of original Slides
      var col = 3; // Number of columns
      var row = 2; // Number of rows
      var wsize = 200; // Size of width of each image (pixels)
      var sep = 5; // Space of each image (pexels)
    
    
      // Create temporary file
      var originalFile = DriveApp.getFileById(id);
      var tempFile = originalFile.makeCopy();
      var idt = tempFile.getId();
    
      // Retrieve slides as images
      var s = SlidesApp.openById(idt);
      var slides = s.getSlides();
      var accessToken = ScriptApp.getOAuthToken();
      var baseUrl = "https://docs.google.com/presentation/d/" + idt + "/export/";
      var url = baseUrl + "png?access_token=" + accessToken;
      var blobs = slides.map(function(e) {
        var blob = UrlFetchApp.fetch(url).getBlob();
        slides[0].remove();
        s.saveAndClose();
        s = SlidesApp.openById(idt);
        slides = s.getSlides();
        return blob;
      });
    
      // Put images 
      var ph = s.getPageHeight();
      var pw = s.getPageWidth();
      var leftOffset = (pw - ((wsize * col) + (sep * (col - 1)))) / 2;
      if (leftOffset < 0) throw new Error("Images are sticking out from a slide.");
      var len = col * row;
      var loops = Math.ceil(blobs.length / (col * row));
      for (var loop = 0; loop < loops; loop++) {
        var ns = s.insertSlide(loop);
        var topOffset, top;
        var left = leftOffset;
        for (var i = len * loop; i < len + (len * loop); i++) {
          if (i === blobs.length) break;
          var image = ns.insertImage(blobs[i]);
          var w = image.getWidth();
          var h = image.getHeight();
          var hsize = h * wsize / w;
          if (i === 0 || i % len === 0) {
            topOffset = (ph - ((hsize * row) + sep)) / 2;
            if (topOffset < 0) throw new Error("Images are sticking out from a slide.");
            top = topOffset;
          }
          image.setWidth(wsize).setHeight(hsize).setTop(top).setLeft(left).getObjectId();
          if (i === col - 1 + (loop * len)) {
            top = topOffset + hsize + sep;
            left = leftOffset;
          } else {
            left += wsize + sep;
          }
        }
      }
      s.saveAndClose();
    
      // Export PDF file
      var urlPdf = baseUrl + "pdf?access_token=" + accessToken;
      var pdf = UrlFetchApp.fetch(urlPdf).getBlob();
      DriveApp.createFile(pdf.setName(originalFile.getName() + ".pdf"));
      tempFile.setTrashed(true);
    }
    
    函数myFunction(){
    //请设置这些参数
    var id=“####文件id####”;//原始幻灯片的文件id
    var col=3;//列数
    var row=2;//行数
    var wsize=200;//每个图像的宽度大小(像素)
    var sep=5;//每个图像的空间(像素)
    //创建临时文件
    var originalFile=DriveApp.getFileById(id);
    var tempFile=originalFile.makeCopy();
    var idt=tempFile.getId();
    //以图像形式检索幻灯片
    var s=SlidesApp.openById(idt);
    var slides=s.getSlides();
    var accessToken=ScriptApp.getOAuthToken();
    var baseUrl=”https://docs.google.com/presentation/d/“+idt+”/export/”;
    var url=baseUrl+“png?access_token=“+accessToken;
    var blobs=slides.map(函数(e){
    var blob=UrlFetchApp.fetch(url.getBlob();
    幻灯片[0]。删除();
    s、 saveAndClose();
    s=SlidesApp.openById(idt);
    slides=s.getSlides();
    返回斑点;
    });
    //放置图像
    var ph=s.getPageHeight();
    var pw=s.getPageWidth();
    var leftOffset=(pw-((wsize*col)+(sep*(col-1))/2;
    如果(leftOffset<0)抛出新错误(“图像从幻灯片上突出”);
    var len=列*行;
    var循环=Math.ceil(blobs.length/(col*row));
    for(var loop=0;loop
    输入: 这是原始幻灯片。此示例幻灯片共有15张幻灯片

    输出: 这是导出的PDF文件

    参考资料:
    编辑: 我在API上找到了幻灯片。因此,我还准备了一个使用它的示例脚本

    使用此脚本时,请在API控制台启用幻灯片API。

    示例脚本:
    函数myFunction(){
    //请设置这些参数
    var id=“####文件id####”;//原始幻灯片的文件id
    var col=3;//列数
    var row=2;//行数
    var wsize=200;//每个图像的宽度大小(像素)
    var sep=5;//每个图像的空间(像素)
    //以图像形式检索幻灯片
    var originalFile=SlidesApp.openById(id);
    var accessToken=ScriptApp.getOAuthToken();
    var pageObjectIds=originalFile.getSlides().map(函数(e){返回e.getObjectId()});
    var reqURL=pageObjectId.map(函数(pageObjectId){
    返回{
    方法:“获取”,
    url:“https://slides.googleapis.com/v1/presentations/“+id+”/pages/“+pageObjectId+”/thumbnail?访问令牌=“+accessToken,
    };
    });
    var reqBlobs=UrlFetchApp.fetchAll(requrl).map(函数(
    
    function myFunction() {
      // Please set these parameters
      var id = "### file ID ###"; // file ID of original Slides
      var col = 3; // Number of columns
      var row = 2; // Number of rows
      var wsize = 200; // Size of width of each image (pixels)
      var sep = 5; // Space of each image (pexels)
    
    
      // Retrieve slides as images
      var originalFile = SlidesApp.openById(id);
      var accessToken = ScriptApp.getOAuthToken();
      var pageObjectIds = originalFile.getSlides().map(function(e) {return e.getObjectId()});
      var reqUrls = pageObjectIds.map(function(pageObjectId) {
        return {
          method: "get",
          url: "https://slides.googleapis.com/v1/presentations/" + id + "/pages/" + pageObjectId + "/thumbnail?access_token=" + accessToken,
        };
      });
      var reqBlobs = UrlFetchApp.fetchAll(reqUrls).map(function(e) {
        var r = JSON.parse(e);
        return {
          method: "get",
          url: r.contentUrl,
        };
      });
      var blobs = UrlFetchApp.fetchAll(reqBlobs).map(function(e) {return e.getBlob()});
    
      // Create a temporary Slides and put images 
      var s = SlidesApp.create("temporarySlides");
      s.getSlides()[0].remove();
      var idt = s.getId();
      var ph = s.getPageHeight();
      var pw = s.getPageWidth();
      var leftOffset = (pw - ((wsize * col) + (sep * (col - 1)))) / 2;
      if (leftOffset < 0) throw new Error("Images are sticking out from a slide.");
      var len = col * row;
      var loops = Math.ceil(blobs.length / (col * row));
      for (var loop = 0; loop < loops; loop++) {
        var ns = s.insertSlide(loop);
        var topOffset, top;
        var left = leftOffset;
        for (var i = len * loop; i < len + (len * loop); i++) {
          if (i === blobs.length) break;
          var image = ns.insertImage(blobs[i]);
          var w = image.getWidth();
          var h = image.getHeight();
          var hsize = h * wsize / w;
          if (i === 0 || i % len === 0) {
            topOffset = (ph - ((hsize * row) + sep)) / 2;
            if (topOffset < 0) throw new Error("Images are sticking out from a slide.");
            top = topOffset;
          }
          image.setWidth(wsize).setHeight(hsize).setTop(top).setLeft(left).getObjectId();
          if (i === col - 1 + (loop * len)) {
            top = topOffset + hsize + sep;
            left = leftOffset;
          } else {
            left += wsize + sep;
          }
        }
      }
      s.saveAndClose();
    
      // Export PDF file
      var urlPdf = "https://docs.google.com/presentation/d/" + idt + "/export/" + "pdf?access_token=" + accessToken;
      var pdf = UrlFetchApp.fetch(urlPdf).getBlob();
      DriveApp.createFile(pdf.setName(originalFile.getName() + ".pdf"));
      DriveApp.getFileById(idt).setTrashed(true);
    }